chrome 扩展 - 服务工作人员注册失败 - 清单 V3

kin*_*234 1 google-chrome google-chrome-extension

我正在尝试构建一个简单的扩展,但在 background.js 行上收到“服务工作人员注册失败”错误。我阅读了一些其他帖子,使用包装器文件加载 background.js,但我使用的是 chrome 版本 105,不需要使用包装器修复。

清单.杰森:

{
  "name": "Test",
  "description" : "Test",
  "version": "1.0",
  "manifest_version": 3,
  "background": {
    "service_worker": "background.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

背景.js:

chrome.action.onClicked.addListener(tab => {  
  chrome.tabs.update({url: 'http://example.com'});
});
Run Code Online (Sandbox Code Playgroud)

wOx*_*xOm 8

如何调查 Service Worker 注册错误

如果您点击Errorschrome://extensions 页面,您将看到:

Uncaught TypeError: Cannot read properties of undefined (reading 'onClicked')
Run Code Online (Sandbox Code Playgroud)

点击它,你会看到来源:

Uncaught TypeError: Cannot read properties of undefined (reading 'onClicked')
Run Code Online (Sandbox Code Playgroud)

这意味着chrome.action未定义。

问题

chrome仅当您的扩展程序的 manifest.json 在特殊键中或在特殊键中列出了其关联的权限名称时,才会出现内部的许多 API "permissions"- 这在 API 的官方文档页面的开头有所指示。

解决方案

添加"action": {}到manifest.json。

您还可以在其中指定标题和图标,请参阅文档,但要小心default_popup- 当指定时它会禁用 onClicked 侦听器,即如果您想使用 default_popup 在此标准弹出窗口中显示 html,您需要移动您的内部onClicked 侦听器从 background.js 到 popup.html 的 popup.js 脚本的开头,该侦听器将在每次显示弹出窗口时运行。在你的情况下是chrome.tabs.update({url: 'http://example.com'});