Как мне заставить executeScript работать на вкладке, которая была загружена до установки расширения? - PullRequest
1 голос
/ 27 июня 2011

Мое расширение внедряет JavaScript в HTML-документ, нажав кнопку pageAction.

Это прекрасно работает, когда пользователь переходит на страницу после установки расширения.

Когда расширение впервые установлено, я могу отобразить кнопку pageAction и прослушать щелчки, но вызов executeScript молча завершается неудачей.

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

Есть ли способ обойти эту проблему?

1 Ответ

1 голос
/ 28 июня 2011

У меня была точно такая же проблема с моим Обновить все вкладки расширение. По сути, когда расширение впервые устанавливается, пользователь не может использовать его, пока не перезагрузит вкладки. Как вы знаете, это действительно плохой пользовательский опыт, автоматически перезагружающий вкладки пользователей, потому что они могут быть в процессе выполнения чего-то, и они потеряют это. В итоге я использовал executeScript, потому что он действительно невидим для пользователя. Вы можете увидеть исходный код, расположенный на GitHub:

https://github.com/mohamedmansour/reload-all-tabs-extension/blob/master/js/reload_controller.js#L96

В основном я использовал подход к целевым установкам из этого вопроса, Обнаружение расширения Chrome при первом запуске / обновлении и использовал chrome.windows.getAll, chrome.tabs.getAllInWindow и chrome.tabs.executeScript для подготовки расширения, когда оно имеет впервые установлен.

chrome.windows.getAll({ populate: true }, function(windows) {
  for (var w = 0; w < windows.length; w++) {
    var tabs = windows[w].tabs;
    for (var t = 0; t < tabs.length; t++) {
      var tab = tabs[t];
      // Only inject in web pages.
      if (tab.url.indexOf('http') == 0) {
        chrome.tabs.executeScript(tab.id, { file: 'content_script.js', allFrames: true });
      }
    }
  }
});

Если executeScript не работает, пожалуйста, сообщите об ошибке на http://crbug.com/new, и разработчики могут посмотреть на нее. В моем случае все работает просто отлично.

Надеюсь, это поможет!

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