Ernestine Posté 9 Mai 2012 Posté 9 Mai 2012 Bonjour, Je cherche le moyen de détecter un changement d'ancre dans la page. Par exemple si j'ai un lien du style : <a href="#monAncre">cool</a> Et ailleurs dans la page : <a id="monAncre"></a> Je veux détecter l'évènement "Arrivée sur l'ancre". Vous allez me dire : tu n'as qu'à simplement détecter le clic sur le lien qui mène à cette ancre. Oui mais non car l'utilisateur peut aussi arriver sur cette ancre en cliquant sur le bouton "Précédent" de son navigateur, ou bien directement dessus s'il a mis l'url avec l'ancre dans ses bookmarks, etc... Comme vous l'aurez sûrement deviné : le but est de pouvoir gérer l'historique de navigation (Précédent / Suivant) pour un site full Ajax : chaque "arrivée" sur une ancre déclenchant donc le chargement d'une nouvelle vue. Au départ je pensais naïvement qu'un simple focus() suffirait (je pensais que quand le navigateur se plaçait sur une ancre, cette ancre prenait le focus), mais non. Pour l'instant le seul truc que j'ai trouvé est franchement pas terrible : un timer qui, chaque seconde, regarde l'url pour voir sir le hash (ce qui suit le #) a changé Avez-vous une solution ? Merci.
captain_torche Posté 9 Mai 2012 Posté 9 Mai 2012 Et juste analyser l'url de la page au chargement de la page ?
Ernestine Posté 9 Mai 2012 Auteur Posté 9 Mai 2012 Et juste analyser l'url de la page au chargement de la page ? Sur une page donnée il y a plusieurs ancres : quand l'utilisateur passe d'une ancre à l'autre (en cliquant sur les liens ou bien en faisant "Précédent / Suivant" dans son navigateur), la page ne se recharge pas...
captain_torche Posté 9 Mai 2012 Posté 9 Mai 2012 Oui, mais si tu changes la partie après le dièse (Ta page devient mapage.html#monAncre), tu peux toujours la récupérer au chargement.
Ernestine Posté 9 Mai 2012 Auteur Posté 9 Mai 2012 Si je passe de mapage.html#monAncre1 à mapage.html#monAncre2 puis à mapage.html#monAncre3, chaque fois que je passe d'une ancre à l'autre, la page ne se recharge jamais, ça reste toujours la même page (donc aucun évènement n'est déclenché, notamment pas un window.onload)
captain_torche Posté 9 Mai 2012 Posté 9 Mai 2012 Normalement le bouton back gère très bien ça. je t'envoie en MP un exemple en JS, (Mais pas en Ajax).
Ernestine Posté 9 Mai 2012 Auteur Posté 9 Mai 2012 Bon alors en fait il existe un plugin jQuery qui fait ça :/>http://benalman.com/projects/jquery-hashchange-plugin/ Ce plugin utilise l'évènement onhashchange pour les navigateurs récents. Et pour les navigateurs anciens (c'est à dire IE 6 et 7), il crée à la volée une iframe et y injecte les urls. Cela répond parfaitement à mes attentes En tous cas merci Captain
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant