Comment puis-je écrire le code de rappel JavaScript qui sera exécuté sur toute modification de l'ancre d'URL?
Par exemple de http://example.com#a
àhttp://example.com#b
Comment puis-je écrire le code de rappel JavaScript qui sera exécuté sur toute modification de l'ancre d'URL?
Par exemple de http://example.com#a
àhttp://example.com#b
Réponses:
Les moteurs de recherche personnalisés Google utilisent un minuteur pour vérifier le hachage par rapport à une valeur précédente, tandis que l'iframe enfant sur un domaine séparé met à jour le hachage de l'emplacement du parent pour qu'il contienne la taille du corps du document iframe. Lorsque le minuteur détecte le changement, le parent peut redimensionner l'iframe pour qu'il corresponde à celui du corps afin que les barres de défilement ne soient pas affichées.
Quelque chose comme ce qui suit permet d'obtenir la même chose:
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
storedHash = window.location.hash;
hashChanged(storedHash);
}
}, 100); // Google uses 100ms intervals I think, might be lower
Google Chrome 5, Safari 5, Opera 10.60 , Firefox 3.6 et Internet Explorer 8 prennent tous en charge l' hashchange
événement:
if ("onhashchange" in window) // does the browser support the hashchange event?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
et le mettre ensemble:
if ("onhashchange" in window) { // event supported?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
}
else { // event not supported:
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
storedHash = window.location.hash;
hashChanged(storedHash);
}
}, 100);
}
jQuery a également un plugin qui vérifiera l'événement hashchange et fournira le sien si nécessaire - http://benalman.com/projects/jquery-hashchange-plugin/ .
EDIT : Prise en charge du navigateur mise à jour (à nouveau).
hashChange
sur window
stackoverflow.com/questions/6390341/how-to-detect-url-change
hashChanged(storedHash);
hashChanged
dans ce cas, est destiné à être une fonction implémentée par un développeur utilisant ce code. La réponse ici montre simplement comment on peut surveiller le hachage pour les changements lorsque l' onhashchange
événement n'est pas disponible, et combine les approches basées sur les événements et basées sur la minuterie pour fournir une solution universelle. Mon point est que la réponse à laquelle vous avez lié n'ajoute absolument rien à la réponse ici ;-). Ils fournissent les mêmes informations de base, même le lien vers le plugin jQuery de Ben Alman. La seule différence est que j'ai fourni une solution JS pure dans ma réponse.
Je recommanderais d'utiliser addEventListener
au lieu d'écraser window.onhashchange
, sinon vous bloquerez l'événement pour d'autres plugins.
window.addEventListener('hashchange', function() {
...
})
En regardant l'utilisation mondiale du navigateur aujourd'hui, une solution de secours n'est plus nécessaire.
setInterval()
n'est pour l'instant qu'une solution universelle. Mais il y a un peu de lumière dans le futur sous forme d' événement de changement de hachage
D'après ce que je vois dans d'autres questions SO, la seule solution inter-navigateurs viable est une minuterie. Consultez cette question par exemple.
Vous pouvez obtenir plus d'informations à partir de ce
Types d'événements de mutation
Le module d'événement de mutation est conçu pour permettre la notification de toute modification de la structure d'un document, y compris les modifications d'attr et de texte.
var storedHash = window.location.hash;
au bloc récapitulatif de mise en place. Btw: De nos jours, cela s'appelle polyfill je pense.