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

时间:2012-07-15 17:51:21

标签: javascript google-chrome-extension

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

我试图使用:

chrome.browserAction.onClicked.addListener

但我得到

  

未捕获的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"
    }
}

这是我的js文件:

chrome.browserAction.onClicked.addListener(function(tab) { alert("hi"); });

7 个答案:

答案 0 :(得分:66)

对于那些已经添加了类似

的人
"background": {
    "scripts": ["background.js"]
}

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

"browser_action": {}

进入你的manifest.json

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

答案 1 :(得分:18)

代码似乎在您的twterland.js文件中,这是您的内容脚本。 browserAction只能在扩展程序页面中使用,因此您无法在内容脚本中使用它。

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

  

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

将其放在background page上。

答案 2 :(得分:10)

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

将此内容添加到manifest.json文件应该禁止这是错误:

"browser_action": {}

请务必阅读documentation for further reference有关如何使用"browser_action"设置的信息。

答案 3 :(得分:2)

我也是这样,添加

"persistent": true 

在manifest.json中的后台声明解决了它。

答案 4 :(得分:1)

请注意,清单文件.json文件中只能包含appbrowser_actionpage_actions中的一个。

例如,要使用chrome.browserAction.setBadgeText,您应该在清单.json中有browser_action字段。

答案 5 :(得分:0)

确保manifest.json中background的scripts数组中的background.js之前没有jquery.js。

"background": {
    "scripts": ["background.js","jquery.js"]
}

答案 6 :(得分:0)

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

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

可在此处找到详细信息:Manifest version 3 migration documentation