Google chrome extension 服务人员注册失败。铬延伸

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应该如下所示: “背景”:{ “服务工

我不明白如何在服务工作者的一部分中从清单v2迁移到v3。出现错误
服务人员注册失败

//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的解决方法
    例如,您可以将v2
    background.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");