Si aucun des événements de la fenêtre ne fonctionne pour vous (comme c'est le cas pour moi), vous pouvez également utiliser un fichier de type MutationObserver qui examine l'élément Root (de manière non récursive).
// capture the location at page load
let currentLocation = document.location.href;
const observer = new MutationObserver((mutationList) => {
if (currentLocation !== document.location.href) {
// location changed!
currentLocation = document.location.href;
// (do your event logic here)
}
});
observer.observe(
document.getElementById('root'),
{
childList: true,
// important for performance
subtree: false
});
Ce n'est pas toujours possible, mais en général, si l'URL change, le contenu de l'élément racine change aussi.
Je n'ai pas fait de profilage, mais théoriquement cela a moins d'overhead qu'un timer parce que le pattern Observer est typiquement implémenté de telle sorte qu'il boucle juste à travers les souscriptions quand un changement se produit. Nous n'avons ajouté qu'un seul abonnement ici. Le timer d'autre part devrait vérifier très fréquemment afin de s'assurer que l'événement a été déclenché immédiatement après le changement d'URL.
De plus, cette méthode a de bonnes chances d'être plus fiable qu'une minuterie puisqu'elle élimine les problèmes de timing.
1 votes
Pour les futurs visiteurs, une nouvelle réponse de @aljgom de 2018 est la meilleure solution : stackoverflow.com/a/52809105/151503