Donc maintenant que HTML5 introduit history.pushState
pour modifier l'historique du navigateur, les sites web commencent à l'utiliser en combinaison avec Ajax au lieu de changer l'identifiant du fragment de l'URL.
Malheureusement, cela signifie que ces appels ne peuvent plus être détectés par onhashchange
.
Ma question est la suivante : Existe-t-il un moyen fiable (hack ? ;)) de détecter quand un site web utilise history.pushState
? La spécification ne dit rien sur les événements qui sont soulevés (du moins, je n'ai rien trouvé).
J'ai essayé de créer une façade et j'ai remplacé window.history
avec mon propre objet JavaScript, mais cela n'a pas eu d'effet du tout.
Plus d'explications : Je suis en train de développer un module complémentaire pour Firefox qui doit détecter ces changements et agir en conséquence.
Je sais qu'il y avait une question similaire il y a quelques jours qui demandait si écouter des Événements DOM serait efficace mais je préfère ne pas m'y fier car ces événements peuvent être générés pour de nombreuses raisons différentes.
Mise à jour :
Voici un jsfiddle (utilisez Firefox 4 ou Chrome 8) qui montre que onpopstate
n'est pas déclenché lorsque pushState
est appelé (ou est-ce que je fais quelque chose de mal ? N'hésitez pas à l'améliorer !).
Mise à jour 2 :
Un autre problème (secondaire) est que window.location
n'est pas mis à jour lorsque l'on utilise pushState
(mais je l'ai déjà lu ici sur SO je crois).