我认为这与Chrome扩展的异步性有关。
我的代码的这一部分:
alert(tab.title);
chrome.tabs.executeScript(tab.id, {code:"document.title = 'test'"});
工作正常,但一旦我删除警报,它就会停止工作。有什么我可以做的去除警报,但仍然注入了js?
编辑:更多代码
tabs是一个全局的选项卡对象数组。
chrome.tabs.onSelectionChanged.addListener(function (tabId) {
for (var i = 0; i < tabs.length; i++) {
if (tabs[i].id == tabId) {
var tab = tabs[i];
while (i < tabs.length) {//length-1
tabs[i] = tabs[i+1];
i++;
}
tabs.pop();
alert(tab.title);//WHY IS THIS NEEDED
chrome.tabs.executeScript(tab.id, {code:"document.title = document.title.substring(1)"});
return;
}
}
});
我很困惑。更改它以下解决了问题:
chrome.tabs.executeScript(tab.id, {code:"setTimeout('document.title = document.title.substring(1)',100)"});
但是,只要我将延迟更改为50,脚本就不会再次执行。我宁愿不必做出这个延迟。有谁知道发生了什么?
答案 0 :(得分:1)
我知道这是一个老问题,但是如果有人在看 - 在超时中包装chrome.tabs.executeScript方法。
setTimeout(function(){chrome.tabs.executeScript(tab.id, {code:"setTimeout('document.title = document.title.substring(1)',100)"});},500);
这当然不理想,但它可以完成任务。
答案 1 :(得分:0)
听起来你有竞争条件。我最好的猜测是将注入的代码更改为在onLoad上执行。