0

我已经多次看到这个问题,我认为我误解了一些范围规则。

在我的弹出 html 中,我有一个按钮:

<button id="submit">Click Me</button>

在该页面的下方,我还声明<script>了带有src文件的 s。一个脚本包含:

document.getElementById("submit").onclick=function(){
    var response = function(tab){
        alert('success ' + tab.id);
    };
    chrome.tabs.create({url: determineURL()}, response);
};

如果我打开弹出窗口并单击按钮,新选项卡将打开determineURL(),但警报永远不会执行。但是,如果我检查弹出窗口,在新选项卡打开并加载时有效地将其保持打开状态,则警报执行。

4

1 回答 1

0

回调未被调用,因为弹出页面在回调触发之前按时间顺序关闭。考虑以下两个断言:

  • 创建一个新选项卡会chrome.tabs.create立即关闭任何打开的扩展弹出窗口

  • chrome.tabs.create回调仅在选项卡创建后触发

  • 未加载的页面无法运行脚本。

因此,在您的弹出页面中运行的脚本如下所示:

  1. 弹出窗口中的脚本创建一个选项卡

  2. 由于打开了新标签,弹出窗口被迫关闭

  3. 弹出窗口中的脚本会导致警报

请注意,步骤 3 是不可能的(根据我上面的第三个断言),只要步骤 2 为真。使用检查模式使弹出窗口持久并防止第 2 步发生。

于 2013-07-11T19:07:34.290 回答