Chrome扩展事件和嵌套回调

时间:2013-07-11 18:08:10

标签: javascript google-chrome-extension

我已经看到这个问题几个不同的时间了,我认为有一些范围规则我误解了。

在我的弹出式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(),但警报永远不会执行。但是,如果我检查弹出窗口,在新选项卡打开并加载时有效地保持打开状态,则警报执行。

1 个答案:

答案 0 :(得分:0)

由于弹出页面在回调可以触发之前按时间顺序关闭,因此不会调用回调。考虑这两个断言:

  • 使用chrome.tabs.create创建新标签会立即关闭所有打开的扩展程序弹出窗口

  • {/ 1>}回调仅在创建标签后触发

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

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

  1. 弹出窗口中的脚本会创建一个标签

  2. 由于新标签页

  3. ,弹出窗口被强制关闭
  4. 弹出窗口中的脚本会生成警报

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