Le navigateur agit sur l'iframe imbriquée avant la page elle-même - existe-t-il un moyen de l'éviter ?

StackOverflow https://stackoverflow.com/questions/2245883

Question

J'ai une page avec des données dynamiques chargées par du ajax et beaucoup de javascript.

la page contient une liste dans 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 barbecue jQuery :Bouton Retour et bibliothèque de requêtes pour simuler le comportement de retour du navigateur.

Tout fonctionne bien, à part le fait que lorsque je clique sur le bouton Précédent pour la première fois, l'iframe revient à son emplacement précédent, puis je dois cliquer à nouveau pour faire revenir la page en arrière.

Existe-t-il un moyen de désactiver le comportement arrière de l'iframe ?

Était-ce utile?

La solution

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

Le problème était avec la façon dont j'ai attribué de nouvelles URL à mon iframe, j'ai utilisé jQuery, donc ça ressemblait à ça:

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

Lors de l'attribution de l'URL de cette manière, il ajoute une nouvelle entrée à la liste des URL visitées du navigateur pour revenir.
Ce n'était pas le comportement souhaité, donc après quelques recherches sur Google, j'ai trouvé que vous pouvez attribuer une nouvelle URL à un objet IFRAME sans l'ajouter à la «liste de dos», cela ressemble à ceci:

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

De cette façon, mon bouton arrière se comporte exactement comme prévu.

btw, j'ai obtenu ma réponse de ici.

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

Autres conseils

La réponse acceptée ne semble pas fonctionner si vous essayez de définir une URL de domaine croisé pour l'IFRAME. En tant que 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);

Je vous suggère de créer un lien hypertexte dans votre iframe.appelez-le 'Back' et mettez un href comme javascript:history.back(-1)C'est le mieux que vous puissiez faire, je pense.

Fondamentalement, vous devez empêcher l'ajout de nouvelles entrées d'histoire dans l'IFRAME, Histoire. Introduit dans HTML5 fonctionnerait dans la plupart des cas.

history.pushState(state, title, url);

Non, c'est entièrement à la hauteur du navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top