У меня работает расширение Google Chrome, целью которого является изменение цвета изображений на пикселях на веб-страницах.Расширение Chrome: Запуск до загрузки (рендеринга) страницы
Чтобы изменить цвет изображений на веб-страницах, с помощью вкладок уже открыть я использую код (в файле background.js):
function executeScriptsInExistingTabs(){
chrome.windows.getAll(null, function(wins) {
for (var j = 0; j < wins.length; ++j) {
chrome.tabs.getAllInWindow(wins[j].id, function(tabs) {
for (var i = 0; i < tabs.length; ++i) {
if (tabs[i].url.indexOf("chrome://") != 0) {
chrome.tabs.executeScript(tabs[i].id, { file: 'muda_conteudo.js' });
chrome.browserAction.setIcon({path: "on.png", tabId:tabs[i].id});
}
}
});
}
});
}
Чтобы изменить цвет в веб-страницах, когда URL вкладки изменяется, я использую следующий код (в файле background.js):
chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
if (flag){
if (info.status == "complete") {
chrome.tabs.executeScript(tabid, {file:"muda_conteudo.js"});
chrome.browserAction.setIcon({path: "on.png", tabId:tab.id})
}
}
});
Я прекрасно работает. Но когда я открываю новую вкладку, я вижу исходные изображения, и я вижу перекрашенные изображения, всего через несколько микросекунд позже. Я хотел бы улучшить это, видя страницу только после перекрашивания (я не хочу видеть оригинал).
У кого-нибудь есть идеи о том, как его решить? Спасибо заранее.
Здравствуйте. Я поместил строку «info.status ==» complete », потому что во время загрузки веб-страницы на вкладке какой URL-адрес событие onUpdated было распознано несколько раз (2 или 3), и страница была перекрашена несколькими (так что окончательный результат не был предназначен). Я думаю, что это ошибка Chrome ... Я благодарю вас за внимание, но я не понимаю, что вы предлагаете ... Моя проблема заключается только в том, что второй скрипт работает, когда URL-адрес изменен в открытом вкладка ... Не могли бы вы объяснить свою идею, пожалуйста. – user3059287
Ну, это не ошибка. onUpdated event запускается несколько раз, потому что это состояние меняется со временем. Это соединение, получение данных и т. Д. Возможно, я ошибаюсь. Попробуйте свой код как есть и добавьте в функцию executeScript дополнительный параметр «runAt»: «document_end». Это означает, что ваш скрипт будет введен сразу после загрузки документа (тела). Это эквивалентно добавлению вашего скрипта в конце страницы. По умолчанию ваш скрипт вводится, когда загружаются все ресурсы. –