chrome.tabs.executeScript仅在其之前使用警报

时间:2011-08-26 20:31:54

标签: google-chrome-extension

我认为这与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,脚本就不会再次执行。我宁愿不必做出这个延迟。有谁知道发生了什么?

2 个答案:

答案 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上执行。