为什么chrome.browserAction.onClicked未定义?

Alo*_*ahl 31 javascript google-chrome-extension

我正在撰写Chrome扩展程序,在点击浏览器操作图标时会将我重定向到网址.

我正在尝试使用:

chrome.browserAction.onClicked.addListener
Run Code Online (Sandbox Code Playgroud)

但我明白了

未捕获的TypeError:无法读取未定义的属性'onClicked'

这是我的清单文件:

{
    "name": "first extension",
    "version": "2.2.12",
    "description": "redirct to a link icon",
    "browser_action": {
        "default_icon": "icontest.png",
        "default_title": "Do action"
    },
    "permissions": ["tabs", "http://*/*"],
    "content_scripts": [{
        "matches": ["http://*.twitter.com/*", "https://*.twitter.com/*"],
        "js": ["twterland.js"]
    }],
    "icons": {
        "16": "icontest.png",
        "48": "icontest.png",
        "128": "icontest.png"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的js文件:

chrome.browserAction.onClicked.addListener(function(tab) { alert("hi"); });
Run Code Online (Sandbox Code Playgroud)

Kir*_*rov 78

对于已经添加了类似内容的人

"background": {
    "scripts": ["background.js"]
}
Run Code Online (Sandbox Code Playgroud)

仍然得到Cannot read property 'onClicked' of undefined- 只需添加

"browser_action": {}
Run Code Online (Sandbox Code Playgroud)

进入你的manifest.json

编辑:感谢@Pacerier的评论,我改变了我的回答

  • `"browser_action":{}`就足够了 (4认同)
  • 这实际上是我的问题。我的脚本已经是背景了。只是我从未声明任何 `browser_action` 开始。 (2认同)

Der*_*會功夫 19

看起来代码就在您的twterland.js文件中,这是您的内容脚本.browserAction只能在扩展页面中使用,因此您无法在内容脚本中使用它.

文档:https://developer.chrome.com/extensions/content_scripts

但是,内容脚本有一些限制.它们不能:
- 使用chrome.*API(chrome.extension的部分除外)
- 使用由其扩展页面
定义的变量或函数 - 使用由网页或其他内容脚本定义的变量或函数

把它放在背景页面上.


Sgn*_*gnl 11

如果您没有"browser_action"定义属性,manifest.json则可能会出现此错误.@Kirill的答案有效,但你还必须添加一个空白icon.png文件,否则chrome会抛出一个错误,它无法找到这样的文件.

将此添加到manifest.json文件应该抑制这是错误:

"browser_action": {}
Run Code Online (Sandbox Code Playgroud)

请务必阅读文档,以获取 有关如何使用该"browser_action"设置的进一步参考.

  • 我还必须删除并重新安装扩展。 (3认同)

Ana*_*tov 10

如果您使用的是manifest_version 3,也可能会出现同样的问题。在这种情况下

  • “background.scripts”应替换为“background.service_worker”
  • “browser_action”应替换为“action”
  • 在js代码中chrome.browserAction应该替换为chrome.action

详细信息可以在这里找到:Manifest version 3 迁移文档