54

我正在编写一个 Chrome 扩展程序,当单击浏览器操作图标时,它会将我重定向到一个 URL。

我正在尝试使用:

chrome.browserAction.onClicked.addListener

但我明白了

未捕获的类型错误:无法读取未定义的属性“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"); });
4

7 回答 7

150

经典清单V2

对于那些已经添加了类似

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

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

"browser_action": {}

进入你的 manifest.json

清单V3

manifest.json:action不使用browser_action,另见迁移指南

"background": {"service_worker": "background.js"}
"action": {}

background.js:chrome.action不使用chrome.browserAction.

于 2016-07-12T20:18:15.797 回答
23

代码似乎在您的twterland.js文件中,这是您的内容脚本。browserAction只能在扩展页面中使用,所以不能在内容脚本中使用。

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

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

而是将其放在背景页面上。

于 2012-07-15T18:19:19.317 回答
19

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

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

"browser_action": {}

请务必阅读文档以进一步 了解如何使用该"browser_action"设置。

于 2017-02-21T21:52:38.480 回答
4

我也得到了这个,添加

"persistent": true 

我在 manifest.json 中的背景声明解决了它。

于 2017-12-10T23:20:42.500 回答
3

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

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

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

于 2021-03-18T23:46:55.327 回答
1

请注意,您只能在 manifest‎.json 文件中添加appbrowser_action、中的一个。page_actions

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

于 2020-07-11T17:26:57.540 回答
-2

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

"background": {
    "scripts": ["background.js","jquery.js"]
}
于 2019-04-28T09:36:03.587 回答