Comment actualiser un IFrame en utilisant Javascript?

Réponses:

152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
kjagiello
la source
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.

nfechner
la source
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();
Horia Dragomir
la source
7

Fonctionne pour IE, Mozzila, Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
Marek Pavelek
la source
4

Vous pouvez utiliser cette méthode simple

function reloadFrame(iFrame) {

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

}
Vasile Alexandru Peste
la source
2

J'ai ça d' ici

var f = document.getElementById('iframe1');
f.src = f.src;
Amarghosh
la source
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.

pery mimon
la source
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);}
Tony
la source
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;
}
lcharbon
la source
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.

NotoriousPyro
la source
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.

sarvesh singh
la source
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);
Michelpm
la source
-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/

Ferhat KOÇER
la source
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