3

我正在尝试编写一个非常简单的 Chrome 扩展程序。此时只有一个弹出的 html 文件,当点击浏览器操作图标时,它会尝试显示警报。我显然做错了什么,因为警报没有触发。

清单.json

{
  "name": "Simple",
  "description": "Simple",
  "version": "1.0",
  "browser_action": {
    "default_title": "Simple",
    "default_icon": "images/icon.png",
    "default_popup": "popup.html"
  },
  "manifest_version": 2
}

popup.html

<html>
<head>
    <script>
        //Executed when the extension's icon is clicked
        chrome.browserAction.onClicked.addListener(function(tab) 
        { 
            alert("gah");
        });
    </script>
</head>

<body>
    Hello World!
</body>
</html>

我也试过:

<html>
<head>
    <script>

        function onPageLoad()
        {
            //Executed when the extension's icon is clicked
            chrome.browserAction.onClicked.addListener(function(tab) 
            { 
                alert("gah");
            });
        }

    </script>
</head>

<body onload="onPageLoad()">
    Hello World!
</body>
</html>

基于响应的更新 感谢您的响应。我进行了以下更改,但仍未被调用 browser.Action.onClicked() (您可以看到,我正在使用 console.log() 而不是警报。(显示全局范围的日志,内部的日志)回调不是)。

清单.json

{
  "name": "Simple",
  "description": "Simple",
  "version": "1.0",
  "permissions": ["tabs", "http://*/*", "https://*/*"],
  "background": {
    "persistent": false,
    "scripts": ["popup.js"]
  }, 
  "browser_action": {
    "default_title": "Simple",
    "default_icon": "images/icon.png",
    "default_popup": "popup.html"
  },
  "manifest_version": 2
}

popup.html

<html>
<head>
    <script type="text/javascript" src="popup.js"></script>
</head>

<body>
    <div style="white-space: nowrap">
        Hello World!
    </div>
</body>
</html>

popup.js

console.log("Running at global scope")

//Executed when the extension's icon is clicked
chrome.browserAction.onClicked.addListener(function(tab) 
{ 
    console.log("Running insode of addListener()");
});
4

2 回答 2

9

chrome.browserAction.onClicked不能在弹出窗口中使用。这没有多大意义——你开始监听浏览器操作图标在被点击后被点击。可以再次单击它,但随后弹出窗口将关闭,并且侦听器将在发生任何事情之前终止。 chrome.browserAction.onClicked应该在后台页面上使用,并且仅在不使用浏览器操作的弹出窗口时使用:

如果浏览器操作有弹出窗口,则不会触发此事件。

来源

您可能应该只写:

<script>
        alert("gah");
</script>

但我不确定警报是否在弹出窗口中起作用。最好尝试类似的东西:

<script>
        document.getElementsByTagName('body')[0].innerHTML = "gah";
</script>

编辑

在您的扩展程序中还有一件事需要修复。正如@Cody 在他的回答中所建议的那样,您不应该使用内联脚本。出于安全原因,它被阻止。将我上面建议的代码放入一个单独的 javascript 文件中,然后将其包含在popup.htmlhead 中:

<script src='script.js' type='text/javascript'></script>
于 2012-10-03T11:53:44.320 回答
1

根据修订后的 Chrome 安全策略,Chrome 扩展程序将不再能够在您的 popup.html http://developer.chrome.com/extensions/contentSecurityPolicy.html#jsexecution中使用内联 javascript

您必须创建一个 JS 文件并在 Manifest.json 中说明它的存在,如下所示:

清单.json

{
  "name": "Simple",
  "description": "Simple",
  "version": "1.0",
  "background": {    
    "scripts": ["bg.js"] //Here you can name the JS file that you have created
  },
  "browser_action": {
    "default_title": "Simple",
    "default_icon": "images/icon.png",
    "default_popup": "popup.html"
  },
  "manifest_version": 2
}

popup.html

<html>
<head>
    <script>
        //Executed when the extension's icon is clicked         
            alert("gah");
    </script>
</head>

<body>
    Hello World!
</body>
</html>

您可以在 Manifest 版本 2 之后开始构建 Chrome 扩展,参考http://developer.chrome.com/extensions/overview.htmlhttp://developer.chrome.com/extensions/getstarted.html

于 2012-10-03T11:58:37.333 回答