我正在开发浏览器扩展。在 Chrome 中,我可以简单地这样做:
manifest.json:
"background": {
"service_worker": "scripts/vh_service_worker.js",
},
在我的 Service Worker 中,我可以毫无问题地使用
ìmportScript("somefile.js")
。
在 Firefox 中,Manifest v3 未实现
background.service_worker
。
尝试#1: 我将服务工作者加载为后台脚本:
manifest.json:
"background": {
"scripts": ["scripts/vh_service_worker.js"]
},
这个一般效果很好,但不幸的是它似乎没有在
WorkerGlobalScope
中执行,所以importScripts()
这个功能不可用。
尝试#2: 我尝试使用后台脚本手动注册 Service Worker:
manifest.json:
"background": {
"scripts": ["scripts/vh_service_worker_loader.js"]
},
vh_service_worker_loader.js:
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register("scripts/vh_service_worker.js")
.then((registration) => {
console.log("Service Worker registered with scope:", registration.scope);
})
.catch((error) => {
console.error("Service Worker registration failed:", error);
});
}
但不幸的是没有可用的
navigator.serviceWorker
条目,因此 if 条件总是返回 false。
所以我的问题是: 如何在 Firefox 中使用
importScripts()
来使用 Manifest V3 进行扩展?
要在 Firefox 的后台脚本中包含多个脚本,您可以将它们全部列在“
manifest.json
”数组下的 background.scripts
中。这会连接脚本并按顺序加载它们。
// manifest.json
{
"manifest_version": 3,
"background": {
"scripts": [
"scripts/file1.js",
"scripts/file2.js",
"scripts/file3.js"
]
},
// ... other properties ...
}