2010-08-25 9 views
3

J'essaie de trouver la meilleure approche pour ne pas casser le bouton de retour dans mon application javascript.Injecter une nouvelle entrée d'historique sans modifier l'URL. Comme google maps fait

Dans mes recherches, j'essaie de voir quel est l'état de l'art. Alors je me suis tourné vers google maps pour voir comment ça marche.

Il dispose d'une fonctionnalité back/forward, mais il ne modifie pas l'URL lors de la génération d'une nouvelle entrée d'historique. Essayez d'aller à http://maps.google.com/, tapez NY et appuyez sur Entrée. Maintenant, utilisez le bouton de retour. Pas de changement d'URL.

Comment font-ils cela? J'ai essayé de comprendre, mais j'ai du mal à patauger à travers la documentation désuète sur l'histoire javascript et les conseils IE6.

+0

Dupliquer de: http://stackoverflow.com/questions/tagged/browser-state – balupton

Répondre

3

Créer une nouvelle entrée de l'histoire:

location.hash = 'new_history_entry'; 

Création d'aucune entrée d'histoire:

location.replace('http://no/new/history/entry'); 

Google Maps utilise des cadres. Pour le vérifier, exécutez HttpFox. Vous obtiendrez une page HTML avec javascript. Vous pouvez l'analyser par vous-même, ou simplement croire que cela fonctionne avec des cadres.

+1

Ceci charge une nouvelle page sans changer l'historique. Je ne veux pas charger une nouvelle page mais changer l'historique. Bon à savoir thoug. – silviot

+0

ow, c'est fait avec location.hash. Je vais mettre à jour mon message. – Lekensteyn

+1

Je connais location.hash, mais ce n'est pas ce que google fait. S'il vous plaît essayer leur histoire. Cherchez quelque chose et revenez. Pas de changement d'URL (hash inclus), mais la page change. – silviot

1

réponse de Lekensteyn ne sera pas ajouter les boutons en arrière/avant dans IE6, vous avez besoin d'un cadre pour cela. jQuery History utilise l'événement onhashchange si le navigateur le supporte (tous les navigateurs modernes le font) sinon il ajoutera le support arrière nécessaire (ie6 nécessite iframes, firefox 1, ie7 etc juste besoin de vérifications par intervalles).