Sur la fenêtre.emplacement.hachage de Changement?
Je suis à l'aide d'Ajax et de hachage pour la navigation.
Est-il un moyen de vérifier si le window.location.hash
changé comme ça?
http://example.com/blah#123 à http://example.com/blah#456
Il fonctionne si je le vérifier lorsque le document est chargé.
Mais si j'ai des #hachage en fonction de navigation ne fonctionne pas lorsque j'appuie sur le bouton retour de votre navigateur (donc j'ai sauter de bla#456 à bla#123).
Il montre à l'intérieur de la zone adresse, mais je ne peux pas l'attraper avec JavaScript.
- Caisse plugin jquery: github.com/cowboy/jquery-hashchange
- History.js prend en charge le HTML5 Gestion de l'État de Fonctionnalité (si vous n'avez pas besoin d'utiliser les hachages de plus!) et gracieusement dégrade en HTML4 les navigateurs utilisant hashchanges. Il prend en charge jQuery, MooTools et Prototype de la boîte.
- En fait nous avons encore besoin d'utiliser des hachages pour fournir de la rétroaction à l'utilisateur qu'une "nouvelle page" a été inséré dans son histoire, à moins d'utiliser l'URL évolution que les commentaires.
- [Hasher]github.com/millermedeiros/hasher
- hmm... je pense que vous avez besoin moar jQuery
Vous devez vous connecter pour publier un commentaire.
La seule façon de vraiment le faire (et comment le "reallysimplehistory' à le faire), est en définissant un intervalle qui continue à vérifier le courant de hachage, et de le comparer à ce qu'il était avant, nous faisons cela et laisser les abonnés s'abonner à un événement de modification que nous avons le feu si les modifications de hachage.. ce n'est pas parfait, mais les navigateurs ne supportent pas cet événement de manière native.
Mise à jour pour garder cette réponse fraîches:
Si vous utilisez jQuery (qui aujourd'hui doit être un peu la base de la plupart) puis une belle solution est d'utiliser l'abstraction que jQuery vous donne en utilisant son système d'événements pour écouter hashchange événements sur l'objet window.
La bonne chose ici est que vous pouvez écrire du code qui n'a même pas à vous soucier de hashchange soutien, mais vous avez besoin de faire un peu de magie, un peu moins connu jQuery fonction jQuery événements spéciaux.
Avec cette fonctionnalité, vous arrivez à faire fonctionner certains de code de configuration pour tous les cas, la première fois que quelqu'un tente d'utiliser de l'événement (par exemple la liaison de l'événement).
Dans ce code de configuration, vous pouvez vérifier pour native prise en charge du navigateur et si le navigateur ne prend pas en natif le mettre en œuvre, vous pouvez mettre en place un timer unique de sondage pour les changements, et de déclencher l'événement jQuery.
Cette complètement délie votre code d'avoir à comprendre ce problème de prise en charge, la mise en œuvre d'un événement spécial de ce genre, c'est trivial (pour obtenir un simple, 98% version de travail), mais pourquoi faire quand quelqu'un d'autre a déjà.
hashchange
de l'événement, tandis que Safari (stable) n'a pas encore de.dojo.subscribe("/dojo/hashchange", context, callback);
hashchange
événement est maintenant largement pris en charge: caniuse.com/#search=hashhashchange
événement est pris en charge par tous les navigateurs modernes et il n'est pas nécessaire d'utiliser jQuery "événement spécial" plugin, sauf à des fins de compatibilité avec les anciens navigateurs. Le code de cette réponse est satisfaisante et devrait continuer à travailler.HTML5 spécifie un
hashchange
événement. Cet événement est maintenant pris en charge par tous les navigateurs modernes. Un soutien a été ajouté dans le navigateur suivant les versions:window.onhashchange = function() { doYourStuff(); }
window.onpopstate
mais cela ne fonctionne pas toujours.Noter que dans le cas de l'Internet Explorer 7 et Internet Explorer 9 la
if
de tresorerie donne le vrai (pour "onhashchange" sous windows), mais lewindow.onhashchange
ne sera jamais le feu, il est donc préférable de les stocker de hachage et de vérifier toutes les 100 millisecondes si ça a changé ou pas pour toutes les versions d'Internet Explorer.MODIFIER -
Depuis jQuery 1.9,
$.browser.msie
n'est pas pris en charge. Source: http://api.jquery.com/jquery.browser/Il y a beaucoup de trucs pour faire face à l'Histoire et à la fenêtre.emplacement.de hachage dans IE navigateurs:
Comme question de départ étant dit, si vous allez à partir de la page une.html#b pour un.html#c, puis appuyez sur le bouton de retour, le navigateur ne sait pas que la page a changé. Permettez-moi de le dire avec un exemple: fenêtre.emplacement.href sera un".html#c', peu importe si vous êtes dans un.html#b ou un.html#c.
En fait, une.html#b et un.html#c sont enregistrés dans l'historique seulement si les éléments '<a name="#b">' et '<a name="#c">' existe déjà dans la page.
Cependant, si vous mettez une iframe à l'intérieur d'une page, de naviguer à partir de un.html#b pour un.html#c dans cette iframe, puis cliquez sur le bouton de retour, iframe.contentWindow.document.emplacement.href changements comme prévu.
Si vous utilisez document.domaine=quelque chose " dans votre code, vous ne pouvez pas accès à l'iframe.contentWindow.document.open()' (et beaucoup d'Histoire Gestionnaires ne)
Je sais que ce n'est pas une vraie réponse, mais peut-être IE-Histoire notes sont utiles à quelqu'un.
Firefox a eu un onhashchange événement depuis 3.6. Voir de la fenêtre.onhashchange.
Ben Alman a un excellent plugin jQuery pour faire face à cette: http://benalman.com/projects/jquery-hashchange-plugin/
Si vous n'êtes pas à l'aide de jQuery, il peut être intéressant de référence à disséquer.
Vous pouvez facilement mettre en œuvre un observateur (la "montre" de la méthode) sur le "hash" propriété "de la fenêtre."emplacement de l'objet.
Firefox a son propre mise en œuvre pour observer les modifications de l'objet, mais si vous utilisez une autre application (comme Surveillez les propriétés de l'objet de modifications dans le code JavaScript) - pour les autres navigateurs, qui va faire l'affaire.
Le code ressemblera à ceci:
Ensuite, vous pouvez tester:
Et bien sûr qui sera le déclencheur de votre fonction d'observateur.
watch
à l'objet qui possède la propriété qui est en train de changer et que vous souhaitez observer.Un décent mise en œuvre peut être trouvé à http://code.google.com/p/reallysimplehistory/.
Le seul (mais aussi) problème et les corrections qu'il a est: dans Internet Explorer, la modification de l'emplacement de hachage manuellement permettra de réinitialiser l'ensemble de l'histoire de la pile (c'est un problème de navigateur et il ne peut être résolu).
Remarque, Internet Explorer 8 n'a pas le support pour le "hashchange" de l'événement, et depuis il est en train de devenir une partie de HTML5, vous pouvez vous attendre d'autres navigateurs pour rattraper le retard.
J'ai été en utilisant ce dans un réagir application pour afficher l'URL de différents paramètres en fonction de ce que la vue de l'utilisateur était sur.
J'ai regardé le paramètre de hachage à l'aide de
Puis
Travaillé un régal, les œuvres de l'avant et à l'arrière des boutons du navigateur et également dans l'historique du navigateur.
addEventListener
appel, vous devez supprimer le()
dedoSomethingWithChangeFunction
()
. LeaddEventListener
fonction nécessite de passer d'une fonction.doSomethingWithChangeFunction
est une fonction.doSomethingWithChangeFunction()
est la valeur de retour de cette fonction, qui dans ce cas n'est pas une fonction.Un autre grand de la mise en œuvre est jQuery Histoire qui va utiliser le natif onhashchange événement si elle est prise en charge par le navigateur, si non il va utiliser une iframe ou un intervalle de manière appropriée pour le navigateur afin de s'assurer de la fonctionnalité attendue est correctement émulé. Il fournit également une interface agréable de se lier à certains états.
Un autre projet intéressant de noter que bien est jQuery Ajaxy qui est à peu près une extension de jQuery Histoire à ajax ajouter au mélange. Comme lorsque vous commencez à utiliser ajax avec des hachages elle est assez compliqué!
C'est tout... maintenant, chaque fois que vous frappez votre arrière ou vers l'avant boutons, la page sera actualisée conformément à la nouvelle valeur de hachage.
J'ai été en utilisant path.js de mon côté client de routage. J'ai trouvé ça assez succinct et léger (il a aussi été publié pour la NGP trop), et rend l'utilisation de hachage en fonction de navigation.
path.js NPM
path.js GitHub
J'ai utilisé un plugin jQuery, HUtil, et a écrit une YUI Histoire comme interface sur le dessus de cela.
Le vérifier une fois. Si vous avez besoin d'aide je peux vous aider.