У меня была точно такая же проблема с моим Обновить все вкладки расширение. По сути, когда расширение впервые устанавливается, пользователь не может использовать его, пока не перезагрузит вкладки. Как вы знаете, это действительно плохой пользовательский опыт, автоматически перезагружающий вкладки пользователей, потому что они могут быть в процессе выполнения чего-то, и они потеряют это. В итоге я использовал 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, и разработчики могут посмотреть на нее. В моем случае все работает просто отлично.
Надеюсь, это поможет!