提问人:gogilan 提问时间:2/11/2022 更新时间:3/13/2023 访问量:3315
参考错误:将 chrome 扩展迁移到 MV3 时,未在 bg.js 文件中定义文档
ReferenceError: document is not defined in bg.js file when migrating chrome extension to MV3
问:
我正在将我的 chrome 扩展代码从 Manifest V2 迁移到 V3。但是,我在 bg.js 文件的第 9 行中收到“参考错误:文档未定义”。有人知道为什么吗?它在 MV2 中工作正常
BG的.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();
}
});
manifest.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
}
弹出式 .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"});
});
答:
0赞
fregante
3/13/2023
#1
MV3 后台工作线程是 Service Worker,它们不是文档,缺少 DOM API。
即使在 MV3 中,Firefox 也会支持常规的后台页面,但在 Chrome 中,您必须使用文档来访问 DOM APIoffscreen
- https://developer.chrome.com/blog/Offscreen-Documents-in-Manifest-v3/
- https://developer.chrome.com/docs/extensions/reference/offscreen/
像这样:
// background-worker.js
chrome.offscreen.createDocument({
url: chrome.runtime.getURL('off_screen.html'),
reasons: ['AUDIO_PLAYBACK'],
justification: 'Playing audio on the user’s request',
});
// off_screen.html
<script src="off_screen.js">
// off_screen.js
new Audio('elevator-music.mp3').play()
评论