Делая небольшое расширение Chrome, я столкнулся с той же проблемой с дополнительной проблемой: иногда меняются страницы, но не URL-адреса.
Например, просто перейдите на домашнюю страницу Facebook и нажмите кнопку «Домой». Вы перезагрузите страницу, но URL не изменится (стиль одностраничного приложения).
В 99% случаев мы занимаемся разработкой веб-сайтов, чтобы мы могли получать такие события от таких структур, как Angular, React, Vue и т. Д.
НО , в моем случае с расширением Chrome (в Vanilla JS) мне приходилось прослушивать событие, которое будет срабатывать при каждом «изменении страницы», которое обычно можно отследить по измененному URL-адресу, но иногда это не так.
Моим домашним решением было следующее:
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.