chrome.tabs.executeScript работает только с предупреждением перед ним - PullRequest
1 голос
/ 27 августа 2011

Я считаю, что это связано с асинхронной природой расширений Chrome.

Этот раздел моего кода:

   alert(tab.title);
   chrome.tabs.executeScript(tab.id, {code:"document.title = 'test'"});

Работает нормально, но как только я убираю предупреждение, оно перестает работать. Могу ли я что-нибудь сделать, чтобы удалить оповещение, но все еще вводить js?

РЕДАКТИРОВАТЬ: больше код

tabs - это глобальный массив объектов tab.

  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 ]

1 голос
/ 28 июля 2012

Я знаю, что это старый вопрос, но если кто-то ищет - заверните метод chrome.tabs.executeScript в тайм-аут.

setTimeout(function(){chrome.tabs.executeScript(tab.id, {code:"setTimeout('document.title = document.title.substring(1)',100)"});},500);

Это, конечно, не идеально, но оно выполняет свою работу.

0 голосов
/ 28 августа 2011

Похоже, у вас есть состояние гонки.Мое лучшее предположение было бы изменить введенный код для выполнения на onLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...