La seule façon de vraiment faire cela (et c'est ainsi que le fait `` l'histoire vraiment simple '') est de définir un intervalle qui continue de vérifier le hachage actuel et de le comparer à ce qu'il était auparavant, nous le faisons et laissons les abonnés s'abonner à un changement événement que nous déclenchons si le hachage change .. ce n'est pas parfait, mais les navigateurs ne prennent vraiment pas en charge cet événement nativement.
Mettez à jour pour garder cette réponse fraîche:
Si vous utilisez jQuery (qui aujourd'hui devrait être quelque peu fondamental pour la plupart), une bonne solution consiste à utiliser l'abstraction que jQuery vous donne en utilisant son système d'événements pour écouter les événements de hachage sur l'objet fenêtre.
$(window).on('hashchange', function() {
//.. work ..
});
La bonne chose ici est que vous pouvez écrire du code qui n'a même pas besoin de vous soucier de la prise en charge du changement de hachage, mais vous devez faire de la magie, sous la forme d'une fonctionnalité jQuery un peu moins connue des événements spéciaux jQuery .
Avec cette fonctionnalité, vous pouvez essentiellement exécuter du code d'installation pour n'importe quel événement, la première fois que quelqu'un tente d'utiliser l'événement de quelque manière que ce soit (comme la liaison à l'événement).
Dans ce code de configuration, vous pouvez vérifier la prise en charge du navigateur natif et si le navigateur ne l'implémente pas nativement, vous pouvez configurer une seule minuterie pour interroger les modifications et déclencher l'événement jQuery.
Cela libère complètement votre code de la nécessité de comprendre ce problème de support, la mise en œuvre d'un événement spécial de ce type est triviale (pour obtenir une version de travail simple à 98%), mais pourquoi le faire quand quelqu'un d'autre l'a déjà fait .