73 votes

Recharger un IFRAME sans ajouter d'historique

Je modifie le src un IFRAME afin de le recharger, il fonctionne bien et déclenche l’événement onload lors du chargement de son code HTML.

Mais cela ajoute une entrée à l'histoire, ce que je ne veux pas. Est-il possible de recharger un IFRAME sans pour autant affecter l'historique?

77voto

greg.kindel Points 978

Utiliser replace () n’est qu’une option avec vos propres iframes de domaine. Il ne fonctionne pas sur les sites distants (par exemple, un bouton Twitter) et nécessite des connaissances spécifiques du navigateur pour accéder de manière fiable à la fenêtre enfant.

Au lieu de cela, il suffit de supprimer l’élément iframe et d’en construire un nouveau au même endroit. Les éléments de l'historique ne sont créés que lorsque vous modifiez l'attribut src après son insertion dans le DOM. Veillez donc à le définir avant l'ajout.

34voto

Greg Points 132247

Vous pouvez utiliser javascript location.replace :

 window.location.replace('...html');
 

Remplacez le document actuel par celui de l'URL fournie. La différence avec la méthode assign () est qu'après l'utilisation de replace (), la page en cours ne sera pas enregistrée dans l'historique de session, ce qui signifie que l'utilisateur ne pourra pas utiliser le bouton Précédent pour y accéder.

21voto

StapleGun Points 347

Comme Greg l’a dit plus haut, la fonction .replace () explique comment procéder. Je n'arrive pas à comprendre comment répondre à sa réponse *, mais l'astuce consiste à faire référence à la propriété contentWindow de iFrames.

 var ifr = document.getElementById("iframeId");
ifr.contentWindow.location.replace("newLocation.html"); 
 

* Je viens d'apprendre que j'ai besoin de plus de réputation pour commenter une réponse.

14voto

JDandChips Points 557

Une autre méthode pour recréer l'iframe serait de supprimer l'iframe du DOM, de modifier le src, puis de l'ajouter de nouveau.

À bien des égards, cela ressemble à la suggestion replace() , mais j'ai eu quelques problèmes lorsque j'ai essayé cette approche avec History.js et la gestion manuelle des états.

 var container = iframe.parent();

iframe.remove();
iframe.attr('src', 'about:blank');

container.append(iframe);
 

5voto

Minh Nguyen Points 77

Essayez d’utiliser cette fonction pour remplacer l’ancien iframe par le nouveau iframe qui est copié de l’ancien:

 function setIFrameSrc(idFrame, url) {
    var originalFrame = document.getElementById(idFrame);
    var newFrame = document.createElement("iframe");
    newFrame.id = originalFrame.getAttribute("id");
    newFrame.width = originalFrame.getAttribute("width");
    newFrame.height = originalFrame.getAttribute("height");
    newFrame.src = url;    
    var parent = originalFrame.parentNode;
    parent.replaceChild(newFrame, originalFrame);
}
 

Utilisez-le comme ceci:

 setIFrameSrc("idframe", "test.html");
 

De cette façon, l'URL d'iframe n'est pas ajoutée à l'historique du navigateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X