Bei einer kleinen Chrome-Erweiterung hatte ich das gleiche Problem mit einem zusätzlichen Problem: Manchmal ändert sich die Seite, aber nicht die URL.
Gehen Sie zum Beispiel einfach zur Facebook-Homepage und klicken Sie auf die Schaltfläche "Home". Sie werden die Seite neu laden, aber die URL ändert sich nicht (einseitiger App-Stil).
In 99% der Fälle entwickeln wir Websites, damit wir diese Ereignisse von Frameworks wie Angular, React, Vue usw. abrufen können.
ABER in meinem Fall einer Chrome-Erweiterung (in Vanilla JS) musste ich mir ein Ereignis anhören, das bei jedem "Seitenwechsel" ausgelöst wird, der im Allgemeinen durch eine geänderte URL abgefangen werden kann, aber manchmal nicht.
Meine hausgemachte Lösung war die folgende:
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);
}
Im Grunde genommen also die Leoneckert-Lösung, die auf den Fensterverlauf angewendet wird und sich ändert, wenn sich eine Seite in einer einzelnen Seiten-App ändert.
Keine Raketenwissenschaft, aber die sauberste Lösung, die ich gefunden habe, wenn man bedenkt, dass wir hier nur eine ganzzahlige Gleichheit prüfen und nicht größere Objekte oder das gesamte DOM.