我正在尝试创建chrome扩展,但是我的browser action点击不起作用!我几乎尝试了一切。这是我的设置:
manifest.json的:
{
"name": "blah",
"version": "1.0",
"description": "blah",
"browser_action": {
"default_icon": "icon1.png",
"popup": "popup.html"
},
"permissions": [
"bookmarks",
"tabs",
"http://*/*",
"https://*/*"
],
"background_page": "background.html"
}
popup.html:
<html>
<head>
<script>
<!-- Try adding the listener in popup.html -->
chrome.browserAction.onClicked.addListener( function(tab){
console.log("Hello from popup"); // This does not show up either
} );
</script>
</head><body>
Hello
</body>
</html>
background.html:
<html>
<head>
<script>
console.log("Background.html"); // This gets displayed. O.K.
function hello() {
console.log("HELLO"); // THIS NEVER GETS DISPLAYED
}
// Supposed to Called when the user clicks on the browser action icon.
chrome.browserAction.onClicked.addListener(hello);
</script>
</head>
</html>
但无论我点击图标有多难,都没有任何反应,并且“HELLO”没有在控制台中打印出来!
我使用的是Chrome 4.0.249.43。我安装了Beta版本,但它与发布的版本完全相同(相同的版本号)。这可能是个问题吗?
你不能拥有onclick事件的“弹出窗口”。从清单文件中删除popup.html。并保留背景页面,它将工作。
你需要删除popup.html,你在popup.html中已经有一个弹出窗口,理论上background.html应该为browserAction做事件但是错误。当您单击应用程序的图标时,已经在弹出窗口中定义了一个onClicked函数。
我不知道你需要什么,但是当你在浏览器中点击时,你可以做很多功能。
例如:在background.html中:
foo(){
if(browserAction && browserAction.onClicked) // you can add all stuff that you need.
do something
}
然后从popup.html调用chrome.extension.getBackgroundPage()。foo();
我希望这对你有所帮助。
在尝试创建chrome扩展时,我也遇到了一些问题。确保在对manifest.json或后台页面进行任何更改后重新加载扩展。要重新加载,请转到扩展页面(扳手>工具>扩展程序)并选择重新加载。这可能只是问题的原因,其他一切似乎都很好。
我找到了问题的根本原因: - MDN
浏览器操作.onClicked: - 单击浏览器操作图标时触发。如果浏览器操作有弹出窗口,则不会触发此事件。
从manifest.json中删除了deafult_popup
"browser_action": {
"default_icon": "img/icon.png",
"default_popup": "popup.html"
}
根据doc:
chrome.browserAction.onClicked.addListener(function(Tab tab) {...});
所以:
// Supposed to be called when the user clicks on the browser action icon.
chrome.browserAction.onClicked.addListener(function(tab) {
hello();
});
应该管用
您确定要查看背景页面的正确JavaScript控制台,而不是其他选项卡吗?
尝试让hello()方法在后台页面中设置一个全局变量,然后在popup.html中有一个按钮检索该变量(使用chrome.extension.getBackgroundPage())并将其显示为警报。