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

Javascript 为什么chrome.browserAction.onClicked未定义?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在编写一个Chrome扩展,当点击浏览器操作图标时,它会将我重定向到一个URL 我正在尝试使用: chrome.browserAction.onClicked.addListener 但我明白了 未捕获的TypeError:无法读取未定义的属性“onClicked” 这是我的清单文件: { "name": "first extension", "version": "2.2.12", "description": "redirct to a link icon",

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

我正在尝试使用:

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"); });

代码似乎在您的
twterland.js
文件中,该文件是您的内容脚本<代码>浏览操作只能在扩展页中使用,因此不能在内容脚本中使用

文件:

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


把它放在屏幕上。

对于那些已经添加了类似

"background": {
    "scripts": ["background.js"]
}
仍然无法读取未定义的属性“onClicked”-只需添加

"browser_action": {}
输入manifest.json

编辑:
感谢@Pacerier的评论,我已经更改了我的答案

如果您的
清单.json
中没有定义
“browser\u action”
属性,则可能会发生此错误@Kirill的答案是可行的,但你也必须添加一个空白的
图标.png
文件,否则chrome会抛出一个错误,它找不到这样的文件

将其添加到
manifest.json
文件应会抑制以下错误:

"browser_action": {}

请务必阅读关于如何使用
“browser\u action”
设置的说明。

"persistent": true 

我在manifest.json中的后台声明解决了这个问题。

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

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

请注意,您只能提起清单中的
app
browser\u action
page\u actions
中的一项‎.json文件


例如,要使用,您应该在清单中有
browser\u action
字段‎.json。

如果您使用的是manifest\u版本3,则可能会出现相同的问题。 在这种情况下

  • “background.scripts”应替换为“background.service\u worker”
  • “浏览器操作”应替换为“操作”
  • 在js代码中,chrome.browserAction应替换为chrome.action

详细信息可以在这里找到:

这实际上是我的问题。我的剧本已经是背景了。只是我从来没有声明过任何
browser\u action
“browser\u action”:{}
足够了为什么?????????这毫无意义。。。我将图标更改为另一个文件,但它无法执行。我把它改回icon.png,一切都很好!谢谢,但我真的抓狂了…页面操作也一样我在清单中定义了浏览器操作,仍然
chrome.pageAction
未在我的背景中定义script@AlexanderMills最初的问题是关于
chrome.browserAction
,所以我不确定
pageAction
。我还必须删除并重新安装扩展。虽然这“解决”了这个问题,显然有很多理由不让
持久化:true
,所以这不是一个理想的解决方案。