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

问题描述 投票:28回答:5

我正在撰写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"); });
javascript google-chrome-extension
5个回答
18
投票

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

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

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

把它放在background page上。


68
投票

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

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

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

"browser_action": {}

进入你的manifest.json

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


10
投票

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

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

"browser_action": {}

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


2
投票

我还得到了这个,补充道

"persistent": true 

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


0
投票

确保我们在manifest.json中的后台脚本数组中的background.js之前没有jquery.js。

"background": {
    "scripts": ["background.js","jquery.js"]
}
© www.soinside.com 2019 - 2024. All rights reserved.