J'utilise des pousstites pour créer des URL senseuses pour le contenu Ajax sur mon site. Je souhaite actualiser le contenu Ajax lorsque l'utilisateur frappe les boutons avant ou arrière. Cependant, j'ai des problèmes comme chromés (correctement) implument surpopstate sur les deux "boutons d'antécédents" (boutons avant / arrière) et "la fin" (page de charge). J'aimerais créer un gestionnaire de surpopstate qui différencie entre la charge de la page et la traversée de l'historique, car je ne veux pas rafraîchir mon contenu Ajax s'il vient déjà d'être chargé avec succès. Peut-on peut-être m'aider avec la différenciation entre les deux? voir http://code.google.com/p/chromium/issues/detail?id=630404040 Pour plus de détails sur Chrome et OnpOpstate. P> Merci P> p>
3 Réponses :
Une solution serait d'initialiser une variable à FALSE à la page Charge de la page, puis sur votre événement POPSTATE, vérifiez cette variable. Si c'est toujours faux, réglez-le à vrai et ne faites rien. À partir de là que tous vos autres événements de POPSTATE ne devraient être que des événements de retour / avancement.
var loaded = false; window.onpopstate = function(e) { if (!loaded) { loaded = true; return; } else { // run your stuff... } }
Qu'en est-il des navigateurs comme Firefox où l'onpopstate n'est pas appelé sur la charge? Cela signifierait que la première Histoire légitime Traversal Pop serait ignorée?
Je le fais comme ceci pour le navigateur croisé ... mais je ne sais pas exactement quels navigateurs devraient être ciblés ... Opéra, Firefox, Safari et Chrome Travailler bien avec ce qui suit. window.onpopstate = fonction (événement) {if (! chargé && $ .browser.webkit) {
Il échoue sur Firefox. Pour résoudre le problème, Fire si (! Chargé) {chargé = true; revenir; } code> Onclick / Appuyez sur le lien.
L'objet passé à la fonction Onppopstate code> aura un membre
Etat CODE>, qui sera
null code> sur la page de page, de sorte que vous puissiez faire quelque chose comme ceci:
Je suis confus à ce sujet; Je clique sur certains éléments qui ont la liaison des événements de clic, et ils déclenchent tous l'événement POPSTATE CODE>, et ils ont tous
état: null code>.
Utiliser historique.pushstate ({URL ': url}, titre, URL); code> avec
URL code> étant l'URL du contenu chargé (recherchez JSON), puis vous pouvez Accédez à cette via:
window.onpopstate = fonction (E) {alerte (json.stringify (e.stax) .url);} code>.