En faisant une petite extension chrome, j'ai rencontré le même problème avec un problème supplémentaire : Parfois, la page change mais pas l'URL.
Par exemple, il suffit d'aller sur la page d'accueil de Facebook et de cliquer sur le bouton "Accueil". Vous rechargerez la page mais l'URL ne changera pas (style d'application à une page).
Dans 99% des cas, nous développons des sites web et nous pouvons donc obtenir ces événements à partir de frameworks comme Angular, React, Vue, etc.
MAIS Dans le cas de mon extension Chrome (en Vanilla JS), j'ai dû écouter un événement qui se déclenche à chaque "changement de page", qui peut généralement être détecté par le changement d'URL, mais parfois non.
Ma solution maison était la suivante :
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);
}
Donc, en gros, la solution de Leoneckert, appliquée à l'historique des fenêtres, qui changera quand une page change dans une application à page unique.
Ce n'est pas très compliqué, mais c'est la solution la plus propre que j'ai trouvée, étant donné que nous ne vérifions ici que l'égalité d'un nombre entier, et non des objets plus grands ou le DOM entier.
1 votes
Pour les futurs visiteurs, une nouvelle réponse de @aljgom de 2018 est la meilleure solution : stackoverflow.com/a/52809105/151503