Jak odświeżyć ramkę iFrame za pomocą JavaScript?

Odpowiedzi:

152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
kjagiello
źródło
2
Działa dla mnie w tej wersji Chrome:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth
3
Do Twojej wiadomości - obecnie (od stycznia 2013 r.) Występuje błąd projektu Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ), który powoduje, że aktualizacje elementów iframe są dodawane do historii dokumentu.
Robert Altman,
Jeśli w iFrame zmienisz stronę, ta metoda straciła nawigację
Eduardo Cuomo
10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
Lyfing
2
to idealnie działa dla mnie w chromiedocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar
104

To powinno pomóc:

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

EDYCJA: Poprawiono nazwę obiektu zgodnie z komentarzem @ Joro.

nfechner
źródło
3
To nie działa w IE9. Zamiast tego należy użyć contentWindow contentDocument.
gotqn
1
Dziękuję za odpowiedź. Dodatkowo, jeśli musisz pozytywnie spowodować odświeżenie innej strony na inną w reload(true)document.getElementById('FrameID').contentWindow.location.replace(new_url);
ramce
15
Nie działa to w przypadku ramek iframe o innym pochodzeniu (protokół, nazwa hosta lub port).
michelpm
18

pod warunkiem, że iframe jest ładowany z tej samej domeny, możesz to zrobić, co ma trochę więcej sensu:

iframe.contentWindow.location.reload();
Horia Dragomir
źródło
7

Działa dla IE, Mozzila, Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
Marek Pavelek
źródło
4

Możesz użyć tej prostej metody

function reloadFrame(iFrame) {

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

}
Vasile Alexandru Peste
źródło
2

Mam to stąd

var f = document.getElementById('iframe1');
f.src = f.src;
Amarghosh
źródło
Jeśli w iFrame zmienisz stronę, ta metoda straciła nawigację
Eduardo Cuomo
2

2017:

Jeśli jest w tej samej domenie, po prostu:

iframe.contentWindow.location.reload();

będzie działać.

pery mimon
źródło
1

Oto fragment kodu HTML:

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

I mój kod Javascript:

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

Bezpośrednie resetowanie atrybutu src:

iframe.src = iframe.src;

Resetowanie src ze znacznikiem czasu do pomijania pamięci podręcznej:

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

Wyczyszczenie src, gdy opcja query strings nie jest możliwa (Data URI):

var wasSrc = iframe.src

iframe.onload = function() {
    iframe.onload = undefined;
    iframe.src = wasSrc;
}
lcharbon
źródło
1

Jeśli używasz ścieżek z krzyżykiem (takich jak mywebsite.com/#/my/url), które mogą nie odświeżać ramek przy przełączaniu hash:

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

Niestety, jeśli nie wykorzystasz limitu czasu, JS może spróbować zamienić ramkę, zanim strona zakończy ładowanie treści (w ten sposób ładuje starą zawartość). Nie jestem jeszcze pewien obejścia tego problemu.

NotoriousPyro
źródło
0

Jeśli na stronie znajduje się wiele elementów iFrame, ten skrypt może być przydatny. Zakładam, że w źródle iFrame istnieje określona wartość, której można użyć do znalezienia określonego elementu iFrame.

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;

Zastąp „/ yourSource” wymaganą wartością.

sarvesh singh
źródło
0

Jeśli adres URL elementu iframe nie zmienia się, możesz go po prostu utworzyć ponownie.

Jeśli element iframe nie pochodzi z tego samego źródła (schemat protokołu, nazwa hosta i port), nie będziesz w stanie poznać bieżącego adresu URL w elemencie iframe, więc będziesz potrzebować skryptu w dokumencie iframe do wymiany wiadomości z jego oknem nadrzędnym ( okno strony).

W dokumencie iframe:

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

Na Twojej stronie:

var iframe = document.getElementById('my-iframe');
var targetOrigin = iframe.src; // Use '*' if you don't care
iframe.postMessage('Please reload yourself', targetOrigin);
michelpm
źródło
-2

Możesz użyć tego:

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
źródło
1
Pytanie nie ma nic wspólnego z popularną biblioteką JavaScript o nazwie jQuery.
John Weisz
Co zrobiłaby Math.round ()? Tutaj wygląda to zupełnie bezużytecznie.
Davide R.
Cześć, użyłem Math.round () Ponieważ niektóre przeglądarki mogą buforować adres URL - strona, więc odświeżanie nie działa.
Ferhat KOÇER