Come aggiornare un IFrame usando Javascript?


Risposte:


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

2
Per me funziona in questa versione di Chrome:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth

3
FYI - Al momento (a partire da gennaio 2013) è presente un bug del progetto Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ) che causa l'aggiunta di aggiornamenti iframe alla cronologia del documento.
Robert Altman

Se in iFrame si cambia pagina, questo metodo ha perso la navigazione
Eduardo Cuomo

10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
Lyfing

2
questo funziona perfettamente per me in cromodocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar

104

Questo dovrebbe aiutare:

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

EDIT: corretto il nome dell'oggetto secondo il commento di @ Joro.


3
Questo non funziona in IE9. Dovresti usare contentWindow invece di contentDocument.
gotqn

1
Grazie per la risposta. Inoltre, se devi causare positivamente un aggiornamento da un'altra pagina a un'altra all'interno dell'iframe, invece di reload(true)utilizzare questo:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101

15
Questo non funziona con iframe con origini diverse (protocollo, nome host o porta).
michelpm

18

a condizione che l'iframe sia caricato dallo stesso dominio, puoi farlo, il che ha un po 'più senso:

iframe.contentWindow.location.reload();

7

Funziona per IE, Mozzila, Chrome

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

4

Puoi usare questo semplice metodo

function reloadFrame(iFrame) {

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

}

2

L'ho preso da qui

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

Se in iFrame si cambia pagina, questo metodo ha perso la navigazione
Eduardo Cuomo

2

2017:

Se si trova nello stesso dominio solo:

iframe.contentWindow.location.reload();

funzionerà.


1

Ecco lo snippet HTML:

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

E il mio codice Javascript:

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

1

Reimpostazione diretta dell'attributo src:

iframe.src = iframe.src;

Reimpostazione di src con un timestamp per il busting della cache:

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

Cancellazione di src quando l'opzione delle stringhe di query non è possibile (URI dati):

var wasSrc = iframe.src

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

1

Se utilizzi percorsi hash (come mywebsite.com/#/my/url) che potrebbero non aggiornare i frame al cambio di hash:

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

Sfortunatamente, se non utilizzi il timeout, JS può provare a sostituire il frame prima che la pagina abbia terminato il caricamento del contenuto (caricando così il vecchio contenuto). Non sono ancora sicuro della soluzione alternativa.


0

Se hai più iFrame all'interno della pagina, questo script potrebbe essere utile. Suppongo che ci sia un valore specifico nella sorgente iFrame che può essere utilizzato per trovare l'iFrame specifico.

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;

Sostituisci "/ yourSource" con il valore che ti serve.


0

Se l'URL del tuo iframe non cambia, puoi semplicemente ricrearlo.

Se il tuo iframe non proviene dalla stessa origine (schema di protocollo, nome host e porta), non sarai in grado di conoscere l'URL corrente nell'iframe, quindi avrai bisogno di uno script nel documento iframe per scambiare messaggi con la sua finestra principale ( la finestra della pagina).

Nel documento iframe:

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

Nella tua pagina:

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

-2

Puoi usare questo:

js:

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

html:

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

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


1
La domanda non ha nulla a che fare con la popolare libreria JavaScript chiamata jQuery.
John Weisz

Cosa farebbe Math.round ()? Sembra totalmente inutile qui.
Davide R.

Ciao, ho usato Math.round () perché alcuni browser possono memorizzare nella cache URL - pagina quindi l'aggiornamento non funziona.
Ferhat KOÇER
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.