嘿,我有一个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
的事件)
如何让执行脚本只运行一次?
答案 0 :(得分:0)
这是已在Chrome 41中修复的错误 - crbug.com/431263。
它仅发生在document_start
,因此如果您使用document_end
或document_idle
,则不会触发该错误(但稍后会激活该脚本)。
只有同步(阻塞)代码才会发生。如果您可以使用异步API,那么您可以在不遇到错误的情况下实现所需的效果。例如:
chrome.tabs.executeScript(tabId, {
// Use setTimeout to work around crbug.com/431263
code: "setTimeout(function() { window.stop(); }, 0);",
runAt: "document_start"
});