2010-02-11 3 views
20

J'ai une page avec des données dynamiques chargées par quelques ajax et beaucoup de javascript.retour du navigateur agit sur iframe imbriqué avant la page elle-même - est-il un moyen de l'éviter?

La page contient une liste à partir de laquelle l'utilisateur peut choisir et chaque valeur sélectionnée charge de nouvelles données sur la page.

L'un de ces éléments de données est une URL fournie à une iframe.

J'utilise jQuery BBQ: Back Button & Query Library pour simuler le comportement du navigateur.

Tout fonctionne bien, en plus du fait que lorsque je clique sur le bouton retour pour la première fois, l'iframe retourne à son emplacement précédent, puis je dois cliquer à nouveau pour que la page revienne.

Y at-il un moyen de désactiver le comportement de retour de l'iframe?

+0

Je suis intéressé par la réponse à cette question; ma compréhension (peut-être incorrecte) est que la page a peu ou pas de contrôle sur ce que fait le navigateur avec le bouton "retour". Ou le "forward" bouton d'ailleurs. – Pointy

Répondre

44

J'ai trouvé la réponse à mon problème, je suppose que cela pourrait être utile pour les autres.

Le problème était avec la façon dont j'attribuer de nouvelles URL à mon Iframe, je l'ai utilisé Jquery il avait l'air quelque chose comme ça:

$('#myIFrame').attr('src',newUrl); 

Lors de l'attribution de l'URL de cette manière, il ajoute une nouvelle entrée dans le navigateur de liste des URL visitées à retourner.
qui n'a pas été le comportement souhaité, donc après quelques googler je trouve que vous pouvez assigner une nouvelle URL à un objet Iframe sans l'ajouter à la « liste de retour », il ressemble à ça:

var frame = $('#myIFrame')[0]; 
frame.contentWindow.location.replace(newUrl); 

De cette façon, mon bouton de retour se comporte exactement comme prévu.

btw, j'ai eu ma réponse de here.

J'espère que cela a été utile pour vous car il était pour moi.

+0

Merci, c'était le problème exact que j'avais. Vraiment aidé. – dev

+3

Cela ne fonctionne que pour iframe avec le même domaine que le site Web sur lequel il est incorporé. Ne fonctionnera pas pour les iframes inter-domaines. – tjmehta

+0

Comment puis-je utiliser ce code lorsque je soumets un formulaire avec target = "myIFrame" pour pointer vers iframe ?? – ShivarajRH

-2

Non, cela dépend entièrement du navigateur.

0

Je vous suggère de créer un lien hypertexte dans votre iframe. appelez-le «Retour» et mettre un href comme javascript: history.back (-1) C'est le meilleur que vous pouvez faire, je pense.

0

Fondamentalement, vous devez empêcher l'ajout de nouvelles entrées d'historique dans l'iframe, history.replaceState introduit dans HTML5 fonctionnerait dans la plupart des cas.

history.pushState(state, title, url); 
+0

À l'intérieur de l'iframe? Comment puis-je dire à l'iframe de le faire si 'src =" http: /google.com "' par exemple? – trusktr

1

La réponse acceptée ne semble pas fonctionner si vous tentez de définir une URL inter-domaine pour l'IFrame. En guise de solution de contournement, j'ai détaché l'IFrame du DOM avant de définir le src (en utilisant jQuery).

// remove IFrame from DOM before setting source, 
// to prevent adding entries to browser history 
var newUrl = 'http://www.example.com'; 
var iFrame = $('#myIFrame'); 
var iFrameParent = iFrame.parent(); 

iFrame.remove(); 
iFrame.attr('src', newUrl); 
iFrameParent.append(iFrame); 
Questions connexes