Лучший ответ, который я нашел, был немного интересным и включал в себя передачу сообщений между скриптами содержимого и файлом background.html.
Я выложу код, затем объясню:
Background.html
function updatePageAction(tabId)
{
chrome.tabs.sendRequest(tabId, {is_content_script: true}, function(response) {
if (response.is_content_script)
chrome.pageAction.show(tabId);
});
};
chrome.tabs.onUpdated.addListener(function(tabId, change, tab) {
if (change.status == "complete") {
updatePageAction(tabId);
}
});
content_script.js
// The background page is asking us to find an address on the page.
if (window == top) {
chrome.extension.onRequest.addListener(function(req, sender, sendResponse) {
if (req.is_content_script)
start_content_script();
sendResponse({is_content_script: true});
});
};
Вы хотите решить обновление или повторное выполнение скрипта при изменениях DOM. К счастью, изменения DOM включали изменение URL (хотя это были изменения AJAX DOM для обновления страницы).
Изменение URL, однако, вызывает событие onUpdated. Однако каждая вкладка запускает эти «события», и мы хотим убедиться, что мы заботимся только о той, в которой мы также сопоставили наши скрипты содержимого (вы можете указать соответствие в манифесте!).
Передав сообщение на скрипт content_script, выполняемый на текущей вкладке, мы спрашиваем: «Вы сценарий моего контента? Если да, пожалуйста, перезапустите».