Google chrome extension 服务人员注册失败。铬延伸
我不明白如何在服务工作者的一部分中从清单v2迁移到v3。出现错误Google chrome extension 服务人员注册失败。铬延伸,google-chrome-extension,service-worker,Google Chrome Extension,Service Worker,我不明白如何在服务工作者的一部分中从清单v2迁移到v3。出现错误服务人员注册失败 //manifest.json “背景”:{ “服务工人”:“/script/background/background.js” }, 在Chrome 93之前,服务工作者文件必须位于根路径中 其中manifest.json是 这是服务工作者规范的一个限制,对于扩展放宽了限制 如果出于任何原因,您希望允许您的扩展在较旧的Chrome中使用,则正确的manifest.json应该如下所示: “背景”:{ “服务工
服务人员注册失败
//manifest.json
“背景”:{
“服务工人”:“/script/background/background.js”
},
- 在Chrome 93之前,服务工作者文件必须位于根路径中
其中manifest.json是
这是服务工作者规范的一个限制,对于扩展放宽了限制
如果出于任何原因,您希望允许您的扩展在较旧的Chrome中使用,则正确的manifest.json应该如下所示:
“背景”:{
“服务工人”:“background.js”
},
相反,要使用任意路径,您需要防止在较旧的Chrome中安装:
“最低chrome版本”:93,
“背景”:{
“服务工人”:“js/bg/worker loader.js”,
“类型”:“模块”
},
类型模块
是可选的,自Chrome 92以来一直受支持。现在可以静态导入ES模块。对动态导入的支持是
在任何Chrome版本中,您都可以使用importScripts('/path/foo.js','/path/bar.js')
从其他目录导入脚本
如果worker脚本在启动过程中抛出错误,则该worker根本不会被注册,并且不会因错误而在任何地方显示错误
如其他答案或中所示,将所有内容包装在try/catch中
典型原因:
- 访问未声明的变量
- 语法错误,如未闭合的括号
- 访问
chrome
API而不在manifest.json的permissions
字段中声明
如果在将脚本移动到wOxxOm提到的根文件夹后仍然存在相同的错误,那么您的background.js文件中可能存在错误。但是,在发布此帖子时,除了通用的服务人员注册失败之外,没有关于此问题的适当错误消息。
尝试遵循Simeon的解决方法
例如,您可以将v2background.js
脚本包装到错误捕获服务工作者中,并在其中导入旧脚本:
// manifest.json
{
"name": "Throw on Register!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background-wrapper.js"
}
}
// background-wrapper.js file
try {
importScripts("background.js");
} catch (e) {
console.error(e);
}
// background.js
console.log("start");
throw new Error("lol");
console.log("end");
之后,您的服务人员将被注册,因为它尽可能简单,您将在控制台中获得错误信息。在我的例子中,它看起来是这样的:
很高兴转到v3:)我遇到了这个错误,因为按照IDE的指示,我天真地用addEventListener替换了addListener。显然,“addListener”方法是ChromeAPI中使用的非常正确的方法,与不推荐的DOM相关方法无关
// manifest.json
{
"name": "Throw on Register!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background-wrapper.js"
}
}
// background-wrapper.js file
try {
importScripts("background.js");
} catch (e) {
console.error(e);
}
// background.js
console.log("start");
throw new Error("lol");
console.log("end");