Robiąc małe rozszerzenie do Chrome, napotkałem ten sam problem z dodatkowym problemem: czasami strona się zmienia, ale nie adres URL.
Na przykład po prostu przejdź do strony głównej Facebooka i kliknij przycisk „Strona główna”. Ponownie załadujesz stronę, ale adres URL nie ulegnie zmianie (styl aplikacji jednostronicowej).
W 99% tworzymy strony internetowe, abyśmy mogli pobierać te zdarzenia z ram, takich jak Angular, React, Vue itp.
ALE , w moim przypadku rozszerzenia Chrome (w Vanilla JS), musiałem słuchać zdarzenia, które będzie wyzwalane przy każdej „zmianie strony”, które generalnie można wychwycić po zmianie adresu URL, ale czasami tak się nie dzieje.
Moje domowe rozwiązanie było następujące:
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);
}
A więc w zasadzie rozwiązanie leoneckert, zastosowane do historii okien, które zmieni się, gdy strona zmieni się w aplikacji pojedynczej strony.
To nie fizyka jądrowa, ale najczystsze rozwiązanie, jakie znalazłem, biorąc pod uwagę, że sprawdzamy tutaj tylko całkowitą równość, a nie większe obiekty lub cały DOM.