it-swarm.com.de

Wie aktualisiere ich ein IFrame mit Javascript?

Ich habe eine Webseite mit einem IFrame und einem Button. Sobald der Button gedrückt wird, muss der IFrame aktualisiert werden. Ist das möglich, wenn ja wie? Ich suchte und konnte keine Antworten finden.

97
Roland
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
118
kjagiello

Das sollte helfen:

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

BEARBEITEN: Der Objektname wurde per Kommentar von @ Joro korrigiert.

96
nfechner

vorausgesetzt, dass der iframe von derselben Domäne geladen wird, können Sie dies tun, was ein wenig sinnvoller ist:

iframe.contentWindow.location.reload();
11
Horia Dragomir

Funktioniert für IE, Mozzila, Chrome

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

Sie können diese einfache Methode verwenden

function reloadFrame(iFrame) {

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

}

2017:

Wenn es sich in derselben Domain befindet, einfach:

iframe.contentWindow.location.reload();

wird funktionieren. 

2
pery mimon

Hab das von hier

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

Hier ist das HTML-Snippet:

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

Und mein Javascript-Code:

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

Das src-Attribut direkt zurücksetzen:

iframe.src = iframe.src;

Src mit einem Zeitstempel für Cache-Busting zurücksetzen:

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

Löschen der src, wenn die Abfragezeichenfolge nicht möglich ist (Daten-URI):

var wasSrc = iframe.src

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

Wenn Sie Hash-Pfade verwenden (wie mywebsite.com/#/my/url), die Frames beim Wechseln des Hashes möglicherweise nicht aktualisieren:

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

Wenn Sie das Zeitlimit nicht verwenden, versucht JS möglicherweise, den Frame zu ersetzen, bevor die Seite mit dem Laden des Inhalts fertig ist (und somit den alten Inhalt lädt). Ich bin mir der Problemlösung noch nicht sicher.

1
NotoriousPyro

Wenn sich mehrere iFrames auf der Seite befinden, kann dieses Skript hilfreich sein. Ich nehme an, es gibt einen bestimmten Wert in der iFrame-Quelle, mit dem der bestimmte iFrame gesucht werden kann.

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;

Ersetzen Sie "/ yourSource" durch den Wert, den Sie benötigen.

0
sarvesh singh

Wenn sich die URL Ihres iframes nicht ändert, können Sie sie einfach neu erstellen.

Wenn Ihr iframe nicht aus demselben Origin stammt (Protokollschema, Hostname und Port), können Sie die aktuelle URL im iframe nicht kennen. Daher benötigen Sie ein Skript im iframe-Dokument, um Nachrichten mit dem übergeordneten Fenster auszutauschen ( das Fenster der Seite).

Im iframe-Dokument:

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

In deiner Seite:

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