Comment actualiser un IFrame en utilisant Javascript?


Réponses:


152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;

2
Cela fonctionne pour moi dans cette version de Chrome:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth

3
Pour votre information: il existe actuellement (en janvier 2013) un bogue du projet Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ) qui entraîne l'ajout de mises à jour d'iframe à l'historique du document.
Robert Altman

Si dans iFrame changez la page, cette méthode a perdu la navigation
Eduardo Cuomo

10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
lyfing le

2
cela fonctionne parfaitement pour moi en chromedocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar

104

Cela devrait aider:

document.getElementById('FrameID').contentWindow.location.reload(true);

EDIT: Correction du nom de l'objet selon le commentaire de @ Joro.


3
Cela ne fonctionne pas dans IE9. Vous devez utiliser contentWindow à la place contentDocument.
gotqn

1
Merci d'avoir répondu. De plus, si vous devez provoquer une actualisation d'une autre page vers une autre dans l'iframe, alors au lieu de reload(true)vous utiliseriez ceci:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101

15
Cela ne fonctionne pas avec des iframes d'origines différentes (protocole, nom d'hôte ou port).
michelpm

18

à condition que l'iframe soit chargé à partir du même domaine, vous pouvez le faire, ce qui est un peu plus logique:

iframe.contentWindow.location.reload();

7

Fonctionne pour IE, Mozzila, Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);

4

Vous pouvez utiliser cette méthode simple

function reloadFrame(iFrame) {

    iFrame.parentNode.replaceChild(iFrame.cloneNode(), iFrame);

}

2

J'ai ça d' ici

var f = document.getElementById('iframe1');
f.src = f.src;

Si dans iFrame changez la page, cette méthode a perdu la navigation
Eduardo Cuomo

2

2017:

S'il se trouve sur le même domaine:

iframe.contentWindow.location.reload();

marchera.


1

Voici l'extrait de code HTML:

<td><iframe name="idFrame" id="idFrame" src="chat.txt" width="468" height="300"></iframe></td>

Et mon code Javascript:

window.onload = function(){
setInterval(function(){
    parent.frames['idFrame'].location.href = "chat.txt";
},1000);}

1

Réinitialisation directe de l'attribut src:

iframe.src = iframe.src;

Réinitialiser le src avec un horodatage pour le contournement du cache:

iframe.src =  iframe.src.split("?")[0] + "?_=" + new Date().getTime();

Effacer le src lorsque l'option de chaînes de requête n'est pas possible (URI de données):

var wasSrc = iframe.src

iframe.onload = function() {
    iframe.onload = undefined;
    iframe.src = wasSrc;
}

1

Si vous utilisez des chemins de hachage (comme mywebsite.com/#/my/url) qui risquent de ne pas actualiser les cadres lors du changement de hachage:

<script>
    window.onhashchange = function () {
        window.setTimeout(function () {
            let frame = document.getElementById('myFrame');
            if (frame !== null) {frame.replaceWith(frame);}
        }, 1000);
    }
</script>

Malheureusement, si vous n'utilisez pas le délai d'expiration, JS peut essayer de remplacer le cadre avant que la page n'ait fini de charger le contenu (chargeant ainsi l'ancien contenu). Je ne suis pas encore sûr de la solution de contournement.


0

Si vous avez plusieurs iFrames dans la page, ce script peut être utile. Je suppose qu'il y a une valeur spécifique dans la source iFrame qui peut être utilisée pour trouver l'iFrame spécifique.

var iframes = document.getElementsByTagName('iframe');
var yourIframe = null
for(var i=0; i < iframes.length ;i++){
    var source =  iframes[i].attributes.src.nodeValue;
    if(source.indexOf('/yourSorce') > -1){
        yourIframe = iframes[i];
    }   
}
var iSource = yourIframe.attributes.src.nodeValue;
yourIframe.src = iSource;

Remplacez "/ yourSource" par la valeur dont vous avez besoin.


0

Si l'URL de votre iframe ne change pas, vous pouvez simplement la recréer.

Si votre iframe n'est pas de la même origine (schéma de protocole, nom d'hôte et port), vous ne pourrez pas connaître l'URL actuelle dans l'iframe, vous aurez donc besoin d'un script dans le document iframe pour échanger des messages avec sa fenêtre parent ( la fenêtre de la page).

Dans le document iframe:

window.addEventListener('change', function(e) {
  if (e.data === 'Please reload yourself') {
    var skipCache = true; // true === Shift+F5
    window.location.reload(skipCache);
  }
}

Dans votre page:

var iframe = document.getElementById('my-iframe');
var targetOrigin = iframe.src; // Use '*' if you don't care
iframe.postMessage('Please reload yourself', targetOrigin);

-2

Vous pouvez utiliser ceci:

Js:

function refreshFrame(){
    $('#myFrame').attr('src', "http://blablab.com?v=");
}

Html:

`<iframe id="myFrame" src=""></iframe>`

JS Fiddle: https://jsfiddle.net/wpb20vzx/


1
La question n'a rien à voir avec la bibliothèque JavaScript populaire appelée jQuery.
John Weisz

Que ferait Math.round ()? Cela semble totalement inutile ici.
Davide R.

Salut, j'ai utilisé Math.round () Parce que certains navigateurs peuvent mettre en cache URL - page afin que l'actualisation ne fonctionne pas.
Ferhat KOÇER
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.