Когда я нажимаю ссылки на веб-страницах, сценарий выполняется один раз, как и ожидалось, но когда веб-страница перенаправляет пользователя (например, при использовании history.pushState()
сценарий выполняется дважды, как я могу остановить это?
Поразительно, что API истории не делает различий между перенаправлениями и кликами по ссылкам, он сообщает о них как о типе link
из transitionType
.
executeScript
по умолчанию выполняется только при верхний фрейм (frameId 0), так что это не проблема. И я также использовал frameId
и parentFrameId
свойства функции обратного вызова, хотя я знал, что это не решит проблему, потому что, как я уже сказал, при нажатии на ссылки, скрипт выполняется только один раз, но когда браузер перенаправляет его, он выполняется дважды.
BackgroundScript:
chrome.webNavigation.onHistoryStateUpdated.addListener(function(obj){
if (obj.frameId === 0 && obj.parentFrameId === -1){
chrome.tabs.executeScript({
file: 'js/contentScript.js',
runAt: 'document_end'
});
console.log(obj.transitionType);
}
});
ContentScript:
console.log("executed!");