Mentre facevo una piccola estensione di Chrome, ho riscontrato lo stesso problema con un problema aggiuntivo: a volte, la pagina cambia ma non l'URL.
Ad esempio, vai alla home page di Facebook e fai clic sul pulsante "Home". Ricaricherai la pagina ma l'URL non cambierà (stile app di una pagina).
Il 99% delle volte, stiamo sviluppando siti Web in modo da poter ottenere quegli eventi da Frameworks come Angular, React, Vue ecc.
MA , nel mio caso di un'estensione di Chrome (in Vanilla JS), ho dovuto ascoltare un evento che si innescherebbe per ogni "cambio di pagina", che in genere può essere intercettato da un cambio di URL, ma a volte no.
La mia soluzione fatta in casa era la seguente:
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);
}
Quindi, in sostanza, la soluzione leoneckert, applicata alla cronologia delle finestre, cambierà quando una pagina cambia in un'unica app.
Non la scienza missilistica, ma la soluzione più pulita che ho trovato, considerando che qui stiamo solo controllando una parità intera e non oggetti più grandi o l'intero DOM.