gog*_*lan 12 javascript error-handling google-chrome-extension
我正在将 chrome 扩展代码从 Manifest V2 迁移到 V3。但是,我在 bg.js 文件的第 9 行收到“ReferenceError:文档未定义”。有人知道为什么吗?在MV2中效果很好
背景.js
//Listen for messages
chrome.runtime.onMessage.addListener((msg, sender, response) => {
if(msg.name == "playTrack"){
//...
var trackName = msg.track;
var audioEle = document.querySelector('.audio-element');
audioEle.src = 'track-'+trackName+'.mp3';
audioEle.play();
}
if(msg.name == "pauseTrack"){
var audioEle = document.querySelector('.audio-element');
audioEle.pause();
}
});
Run Code Online (Sandbox Code Playgroud)
清单.json
{
"name": "Sizzo",
"version": "0.01",
"description": "Sizzo - Stay flawless with the perfect audio reminders",
"action": {
"default_title": "Sizzo",
"default_popup": "popout.html"
},
"background":{
"service_worker": "bg.js"
},
"icons": { "48": "icon48.jpg",
"128": "icon128.jpg" },
"manifest_version": 3
}
Run Code Online (Sandbox Code Playgroud)
弹出.js
document.querySelector('button.play').addEventListener('click', function(){
var SelTrack = document.querySelector('select').value;
chrome.runtime.sendMessage({name: "playTrack", track: SelTrack});
});
document.querySelector('button.pause').addEventListener('click', function(){
chrome.runtime.sendMessage({name: "pauseTrack"});
});
Run Code Online (Sandbox Code Playgroud)
MV3 后台工作人员是服务工作人员,它们不是文档并且缺乏 DOM API。
\n即使在 MV3 中, Firefox 也将支持常规背景页面,但在 Chrome 中,您必须使用offscreen文档来访问 DOM API
就像是:
\n// background-worker.js\nchrome.offscreen.createDocument({\n url: chrome.runtime.getURL(\'off_screen.html\'),\n reasons: [\'AUDIO_PLAYBACK\'],\n justification: \'Playing audio on the user\xe2\x80\x99s request\',\n});\nRun Code Online (Sandbox Code Playgroud)\n// off_screen.html\n<script src="off_screen.js">\nRun Code Online (Sandbox Code Playgroud)\n// off_screen.js\nnew Audio(\'elevator-music.mp3\').play()\nRun Code Online (Sandbox Code Playgroud)\n