Donc, je voudrais que ma page charge du contenu si le hachage d'une fenêtre a changé.onHashChange running onLoad ... awkward
En utilisant Mootools, cela est assez facile:
$extend(Element.NativeEvents, {
hashchange: 1
});
puis:
window.addEvent('hashchange', function() {});
Cependant, l'événement hashchange
tire lorsque la page est chargée, même si les spécifications l'exigent pas tirer jusqu'à ce que le chargement de la page soit terminé!
Sauf si je charge la page pour la première fois, sans hachage, tout fonctionne comme prévu.
Je pense que le problème ici est le fait que le navigateur considère le chargement de la page "complète", puis exécute le reste du JavaScript, qui inclut la détection de hachage pour charger la page requise.
Par exemple, si je tapais http://foo.bar/
, tout irait bien. Cependant, idéalement, http://foo.bar/#test
chargerait la page initiale, détecterait le hachage et chargerait le contenu "test".
Malheureusement, le navigateur charge la page initiale, la considère comme "domready", et charge ensuite le contenu "test", qui déclenche alors onHashChange
. Oops?
Cela provoque une boucle infinie, sauf si je demande spécifiquement au navigateur de ne PAS mettre à jour le hachage si un événement onHashChange
est en cours de déclenchement. C'est simple:
var noHashChange;
noHashChange = true;
var hashes = window.location.hash.substr(1).split("/"); // Deciphers the hash, in this case, hashes[0] is "test"
selectContent(hashes[0]); // Here, selectContent would read noHashChange, and wouldn't update the hash
noHashChange = false;
Maintenant, mettre à jour le hash APRÈS le chargement de la page fonctionnera correctement. Sauf que cela devient encore fou sur un chargement de page initial et récupère le contenu environ 3 ou 4 fois, car il continue de détecter le hachage a changé. Désordonné.
Je pense qu'il peut avoir quelque chose à voir avec la façon dont je suis en train de le hachage, mais je ne peux pas penser à une meilleure façon de le faire, sauf:
window.location.hash = foobar;
... à l'intérieur d'une fonction est exécuté chaque fois qu'un nouveau contenu est sélectionné.
Voilà le problème, oui? La page est chargée, le contenu est chargé (si le contenu) ...
J'espère que je suis cohérent ...
Pouvez-vous créer un jsfiddle avec un exemple de travail? www.jsfiddle.com –
@chase: www.jsfiddle. * net * - juste au cas où;) – polarblau
Woops! J'aurais du être mieux informé. –