Chrome 扩展 action.onClicked

LEM*_*EMO 8 javascript google-chrome-extension google-chrome-devtools

我正在构建一个 chrome 扩展,我使用此代码在新窗口中打开弹出窗口。(使用清单v3)今天突然停止工作。

未捕获的类型错误:无法读取未定义的属性(读取“onClicked”)昨天它工作得很好,并且与 chrome 扩展文档相对应。有人知道可能是什么问题吗?

这是我的代码:

chrome.action.onClicked.addListener(tab => {
    chrome.windows.create({
        url: chrome.runtime.getURL("popup.html"),
        type: "popup",
        height: 800,
        width: 516
      }, function(win) {
      });
});
Run Code Online (Sandbox Code Playgroud)

Ral*_* L. 11

这个问题已经得到解答,但我想发布一个完整的示例,因为我找不到同时具有扩展代码和相应的 manifest.json 的帖子。

这是使用 Manifest V3 的完整有效示例。

// File: manifest.json //

{
    "manifest_version": 3,
    "name": "My extension",
    "description": "Extension that extends things",
    "author": "Me",
    "version": "0.1",
    "content_scripts": [
      {
        "matches": [
          "https://*"
        ],
        "js": ["content.js"]
      }
    ],
    "icons": { "48":  "icons/icon128.jpg",
              "128":  "icons/icon512.jpg"},
    "background": {
      "service_worker": "background.js"
    },
    "action": {},
    "permissions": [
      "storage",
      "downloads",
      "tabs"
  ]
}
Run Code Online (Sandbox Code Playgroud)
// File: background.js //

// Called when the user clicks on the browser action.
chrome.action.onClicked.addListener(tab => {
    // Send a message to the active tab
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      var activeTab = tabs[0];
      chrome.tabs.sendMessage(activeTab.id, {"message": "clicked_browser_action"});
    });
  });

Run Code Online (Sandbox Code Playgroud)

(显然,在复制 .json 文件之前删除注释,并适当调整扩展程序的权限。)

请注意,如果您使用的 Chrome 版本低于 Chrome 93,则您的manifest.json 和background.js 必须位于同一目录中。