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, allez simplement sur la page d'accueil Facebook et cliquez sur le bouton «Accueil». Vous rechargerez la page mais l'URL ne changera pas (style d'application d'une page).
99% du temps, nous développons des sites Web afin que nous puissions obtenir ces événements à partir de Frameworks tels que Angular, React, Vue, etc.
MAIS , dans mon cas d'une extension Chrome (dans Vanilla JS), j'ai dû écouter un événement qui se déclenchera à chaque "changement de page", qui peut généralement être capturé par une URL modifiée, mais parfois ce n'est pas le cas.
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, fondamentalement, la solution leoneckert, appliquée à l'historique des fenêtres, qui changera lorsqu'une page change dans une seule application de page.
Ce n'est pas sorcier, mais la solution la plus propre que j'ai trouvée, étant donné que nous ne vérifions qu'une égalité entière ici, et non des objets plus gros ou l'ensemble du DOM.