2010-08-19 4 views
1

J'ai trouvé des solutions pour tout manipuler sauf ce dont j'ai besoin. Voici le scénarioRetour dans l'historique de iframe mais changement d'adresse de la fenêtre principale

Comme dans GMail - le contenu principal est présenté dans une iframe. Cliquer sur les liens de la page principale cible l'iframe. Cela fonctionne bien, et sans couture. À ce stade, si je clique sur "Retour" sur le navigateur - l'iframe reviendra. C'est bon car le cache est impliqué et la page ne se télécharge pas. L'ajout d'une logique commune de modification du hachage casse tout. Maintenant, lorsque vous revenez, le navigateur change le has, mais ne modifie PAS l'historique iframe. J'ai essayé d'accéder à l'histoire de ce iframe particulier frames['myiframe'].history.back() mais cela change encore le hachage sans changer la source iframe.

J'ai trouvé un history.replaceState(temp, '', iframelocation) sournois et cela fonctionne parfaitement lorsque vous cliquez sur des liens, mais en remontant, il essaie en fait de charger l'emplacement iframe dans la fenêtre principale.

Je suis à perte. Je sais que GMail ne demande pas toutes les informations à chaque fois que vous répondez ou que vous avancez. Alors, comment le fait-il? Utilise-t-il plusieurs iframes et change-t-il celui qui est visible?

Merci!

P.S. Testé une situation simple: créer un iframe, et changer un lien via certains <a href="child" target="iframe">a Maintenant, changez le hachage via location.href = 'something' Jusqu'ici tout va bien. Maintenant si vous dites spécifiquement à l'iframe de revenir dans l'histoire - il ne sera pas frames['iframe'].contentWindow.history.back()

Répondre

0

Je n'ai pas trouvé un moyen d'avoir le navigateur responsable de l'utilisation du cache dans l'historique.

Ma solution finale utilisait le plugin history de jquery, et un tableau de hachage javascript d'objets div.

var hash; // populated with the value after # 
History[hash] = $('<div>').load(hash); 

une vérification rapide si cette valeur n'est pas nulle - et le remplacement du centre de l'écran par le div. Jusqu'à présent fonctionne comme un charme, à l'exception que la valeur de hachage ne change pas si vous cliquez sur un lien déjà chargé, donc détecter une actualisation prévue (en cliquant sur le lien d'une vue sur laquelle vous êtes déjà) est plus difficile.

Bonne chance!

0

Gmail utilise les requêtes AJAX pour peupler les couches Div je crois. Vous devriez envisager d'utiliser JQuery pour charger dynamiquement les données. Il existe également un plugin d'historique jquery qui vous permet d'avancer et de sortir de manière transparente. http://github.com/tkyk/jquery-history-plugin

+0

Le repeuplement de Divs signifierait ré-obtenir des données, ou avoir plusieurs divs. Si vous ouvrez gmail dans Firefox et que vous désactivez les styles, vous verrez qu'il a des iframes mais il modifie le hachage de la fenêtre principale. J'utilise déjà les astuces jquery + history, le problème est que le bouton "back" ne peut conserver l'historique que pour la fenêtre principale OU l'iframe. Je ne peux pas modifier l'historique de la fenêtre principale et l'historique iframe en même temps – Mikhail

+0

J'ai mal compris la question. – CogitoErgoSum

0

Ce n'est pas une réponse directe, mais il pourrait être utile si vous regard sur le code source de BBQ jQuery @http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js

Il remplace les boutons arrière/avant et garde un historique dans le navigateur, si c'est tout utilisation.

+0

Je l'ai vérifié; merci pour la référence.Bien que cela soit utile, il ne résout pas le problème de la modification de l'historique iframe lors de la modification de l'historique des fenêtres – Mikhail

Questions connexes