chrome.tabs.executeScript多次运行

时间:2015-01-12 10:22:05

标签: javascript google-chrome google-chrome-extension

嘿,我有一个Chrome扩展程序,我需要停止加载(在启动之前)给出的页面。

所以我们在background.js中有以下代码:

chrome.webNavigation.onBeforeNavigate.addListener(function (e){
    // Important! there's more code that make sure this runs once - it isn't recuresive
    killPage(e.tab);
});

function killPage(tabId){
    chrome.tabs.executeScript(tabId, {
        code: "window.stop();",
        runAt: "document_start"
    });
}

当我们使用window.stop时,执行脚本会发生两次,当我们使用时 document.open();document.close()它无休止地运行并达到最大callstack。

我们确保再次运行的唯一内容是执行脚本中的代码(不是行chrome.tabs.executeScript的事件)

如何让执行脚本只运行一次?

1 个答案:

答案 0 :(得分:0)

这是已在Chrome 41中修复的错误 - crbug.com/431263

它仅发生在document_start,因此如果您使用document_enddocument_idle,则不会触发该错误(但稍后会激活该脚本)。

只有同步(阻塞)代码才会发生。如果您可以使用异步API,那么您可以在不遇到错误的情况下实现所需的效果。例如:

chrome.tabs.executeScript(tabId, {
    // Use setTimeout to work around crbug.com/431263
    code: "setTimeout(function() { window.stop(); }, 0);",
    runAt: "document_start"
});