Comment remplacer le hachage de l'emplacement et de ne garder que la dernière entrée de l'historique?
Je suis en utilisant le jQuery BARBECUE plug-in pour suivre les utilisateurs progrès par le biais de la page. Cependant, je ne veux créer 1 entrée supplémentaire dans le mode histoire, pas un seul pour chaque changement de hachage.
J'ai essayé de la jQuery.bbq.pushState
et merge_mode
méthodes, sans succès: Nouvelles entrées de l'historique sont toujours ajoutés:
jQuery.bbq.pushState({ sort: encodeURIComponent(sort) });
J'ai aussi essayé de location.replace()
, mais cela ne fonctionne pas pour Safari 5.1.2.
location.replace('#' + encodeURIComponent(sort))
Quelle est la solution de navigateur pour modifier la table de hachage, sans ajouter trop d'entrées à l'histoire?
Avez-vous déjà utilisé
Je ne vois pas une telle méthode dans la bibliothèque benalman.com/code/projects/jquery-bbq/docs/files/... @Rob W
J'ai fait la
l'histoire.replaceState ne fonctionne pas dans le < IE 9, donc je vais vérifier history.js prochaine @RobW
il semble que HTML4, les navigateurs ne permettent pas cette fonctionnalité fonctionne, et seulement de créer 1 entrée dans l'histoire. Merci pour votre aide!
replaceState
au lieu de pushState
?Je ne vois pas une telle méthode dans la bibliothèque benalman.com/code/projects/jquery-bbq/docs/files/... @Rob W
J'ai fait la
history.replaceState
de la méthode. Voir aussi History.js.l'histoire.replaceState ne fonctionne pas dans le < IE 9, donc je vais vérifier history.js prochaine @RobW
il semble que HTML4, les navigateurs ne permettent pas cette fonctionnalité fonctionne, et seulement de créer 1 entrée dans l'histoire. Merci pour votre aide!
OriginalL'auteur Hoppe | 2012-02-10
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je montre la définition de la fonction
replaceHash
, qui accepte un seul argument: Le nouvel emplacement de hachage. Une explication détaillée de la logique peut être trouvé au bas de la réponse.Code:
Fonction logique
de l'histoire.replaceState
est pris en charge, la fonction sera toujours remplacer l'actuel hachage, sans effets secondaires.Sinon, une référence (
hash
) à la premièrelocation.hash
propriété est créée, et la fonction suivante est définie:location.hash != hash
, alors que nous savons pour sûr que l'histoire de l'état est au moins passé le premier affichage de la page. Nous pouvons revenir en arrière dans l'histoire, sans déchargement de la page.history.back(); //Go back in the history
.location.hash
de la propriété. Si nous sommes allés en arrière dans l'histoire, dans l'étape précédente, l'entrée de l'historique est écrasé.Les secours (le dernier) méthode ne peut pas toujours remplacer l'histoire:
Lorsque
location.hash == hash
, l'une des conditions suivantes est remplie:history.back();
, la page peut être déchargé, ce qui n'est pas souhaitable.Donc, pour être sûr, nous jamais décharger de la page lorsque la valeur de hachage est égale à la sauvé de hachage d'origine.
Remarque: Il est important d'exécuter ce code avant un changement de hachage. Lorsque la valeur de hachage a déjà été changé, le script n'est pas fiable. L'utilisateur pourrait avoir navigué à la première de hachage de l'état, qui n'est pas égal à l'sauvé
hash
. Par conséquent,history.back()
de décharge de la page.C'est génial, merci beaucoup
OriginalL'auteur Rob W
Vous pouvez utiliser le
replace
-méthode dewindow.location
, sans le deuxièmenewSubStr
-argument. Cela fonctionne dans tous les navigateurs, même oldIE:Noter, que si il y a un élément valide (comme par spec) dans le document, la page va sauter/faire défiler jusqu'à.
Pourriez-vous fournir plus de détails s'il vous plaît? Quel Navigateur, quelle version?
J'ai juste essayé de l'emplacement.remplacer(emplacement.href.scinder('#')[0]), afin de perdre le hachage avant de se retrouver ici. Dans google chrome,@mac, ce serait de recharger la page.
mais je n'ai pas essayer juste passer le hash... attendez...
si vous venez de passer de hachage, il est toujours enregistré sur l'histoire 🙁
OriginalL'auteur yckart