При создании небольшого расширения для Chrome я столкнулся с той же проблемой, связанной с дополнительной проблемой: Иногда страница меняется, но не URL-адрес.
Например, просто перейдите на FacebookДомашняя страница и нажмите кнопку «Домой».Вы перезагрузите страницу, но URL-адрес не изменится (стиль одностраничного приложения).
99% времени, мы занимаемся разработкой веб-сайтов, чтобы мы могли получать эти события из таких фреймворков, как Angular, React, Vueи т. д.
НО , в моем случае расширение Chrome (в Vanilla JS) мне пришлось прослушивать событие, которое будет запускаться для каждого «изменения страницы», которое обычно можетбыть измененным, но иногда это не так.
Мое домашнее решение было следующим:
listen(window.history.length);
var oldLength = -1;
function listen(currentLength) {
if (currentLength != oldLength) {
// Do your stuff here
}
oldLength = window.history.length;
setTimeout(function () {
listen(window.history.length);
}, 1000);
}
Таким образом, в основном решение leoneckert, примененное к истории окон, будет меняться, когдастраница меняется в одностраничном приложении.
Не ракетостроение, а самое чистое решение, которое я нашел, учитывая, что мы здесь проверяем только целочисленное равенство, а не более крупные объекты или весь DOM.