【问题标题】:Google chrome extension issue: popup.html interferes with script execution in background.htmlGoogle chrome 扩展问题:popup.html 干扰了 background.html 中的脚本执行
【发布时间】:2012-03-07 00:01:27
【问题描述】:

我正在学习如何扩展谷歌浏览器,我遇到了以下问题:

我有以下清单文件:

{
    "name": "My First Extension",
    "version": "1.0",
    "description": "The first extension that I made.",
    "background_page": "background.html",
    "browser_action": {
        "default_icon": "icon.png", 
        "popup": "popup.html"
     },
    "permissions": [
    "tabs",
        "http://*/*",
        "https://*/*"
    ]
 }

我的 background.html 文件只是在页面中注入了一些简单的 JavaScript:

<script>
    // Called when the user clicks on the browser action.
    chrome.browserAction.onClicked.addListener(function(tab) {
        chrome.tabs.executeScript(null, {code:"alert(\"hi from background CODE\");"});
    });
</script>

我的 popup.html 文件只是简单的 HTML:

<body>
    Sup Playa
</body>

background.html 中的对话框永远不会显示。 popup.html 按预期运行。

但是,当我从清单文件中注释掉 popup.html 时,background.html 中的脚本可以工作。

我做错了什么?为什么没有显示对话框和弹出窗口?

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

    正如docs 中所说:

    onClicked 事件不会在浏览器操作有弹出窗口时触发。

    因此,如果您将任何 html 文件分配给弹出窗口 "popup": "popup.html"(而不仅仅是没有正文的按钮),则不会触发 onClicked 事件。

    如果您希望每次打开时都执行某些内容,您可以将代码直接放入popup.html(它具有与背景页面相同的权限):

    chrome.tabs.executeScript(null, {code:"alert(\"hi from background CODE\");"});
    

    【讨论】:

    • 感谢您的帮助。所以基本上你必须做出设计决定,让执行发生在 popup.html 或 background.html 中是否有意义,但你不能在这两个地方都有。
    • @Mitya 你可以在这两个地方执行,只是你不能听chrome.browserAction.onClicked.addListener,因为如果浏览器操作有一个弹出窗口,它就不会触发。
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2013-01-02
    • 2014-09-18
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多