Ich habe eine Webseite mit einem IFrame und einer Schaltfläche. Sobald die Schaltfläche gedrückt wird, muss der IFrame aktualisiert werden. Ist das möglich, wenn ja wie? Ich suchte und konnte keine Antworten finden.
Ich habe eine Webseite mit einem IFrame und einer Schaltfläche. Sobald die Schaltfläche gedrückt wird, muss der IFrame aktualisiert werden. Ist das möglich, wenn ja wie? Ich suchte und konnte keine Antworten finden.
Antworten:
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
document.getElementById('frame_id').contentDocument.location.reload(true);
Dies sollte helfen:
document.getElementById('FrameID').contentWindow.location.reload(true);
BEARBEITEN: Der Objektname wurde gemäß @ Joros Kommentar korrigiert.
reload(true)
document.getElementById('FrameID').contentWindow.location.replace(new_url);
Vorausgesetzt, der Iframe wird von derselben Domain geladen, können Sie dies tun, was etwas sinnvoller ist:
iframe.contentWindow.location.reload();
Funktioniert für IE, Mozzila, Chrome
document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
Sie können diese einfache Methode verwenden
function reloadFrame(iFrame) {
iFrame.parentNode.replaceChild(iFrame.cloneNode(), iFrame);
}
Habe das von hier
var f = document.getElementById('iframe1');
f.src = f.src;
2017:
Wenn es nur auf derselben Domain ist:
iframe.contentWindow.location.reload();
wird funktionieren.
Das src-Attribut direkt zurücksetzen:
iframe.src = iframe.src;
Zurücksetzen des src mit einem Zeitstempel für das Cache-Busting:
iframe.src = iframe.src.split("?")[0] + "?_=" + new Date().getTime();
Löschen der Option src, wenn die Option Abfragezeichenfolgen nicht möglich ist (Daten-URI):
var wasSrc = iframe.src
iframe.onload = function() {
iframe.onload = undefined;
iframe.src = wasSrc;
}
Wenn Sie Hash-Pfade verwenden (wie mywebsite.com/#/my/url), die beim Wechseln des Hash möglicherweise keine Frames 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 den Inhalt vollständig geladen hat (und somit den alten Inhalt geladen hat). Ich bin mir der Problemumgehung noch nicht sicher.
Wenn die Seite mehrere iFrames enthält, kann dieses Skript hilfreich sein. Ich gehe davon aus, dass die iFrame-Quelle einen bestimmten Wert enthält, mit dem der bestimmte iFrame gefunden 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 gewünschten Wert.
Wenn sich die URL Ihres Iframes nicht ändert, können Sie sie einfach neu erstellen.
Wenn Ihr Iframe nicht denselben Ursprung hat (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);
}
}
Auf Ihrer Seite:
var iframe = document.getElementById('my-iframe');
var targetOrigin = iframe.src; // Use '*' if you don't care
iframe.postMessage('Please reload yourself', targetOrigin);
Sie können dies verwenden:
Js:
function refreshFrame(){
$('#myFrame').attr('src', "http://blablab.com?v=");
}
Html:
`<iframe id="myFrame" src=""></iframe>`
JS Fiddle: https://jsfiddle.net/wpb20vzx/