Bagaimana cara menyegarkan IFrame menggunakan Javascript?

Jawaban:

152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
kjagiello
sumber
2
Ini berfungsi untuk saya di versi Chrome ini:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth
3
FYI - Saat ini (per Januari 2013) bug proyek Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ) yang menyebabkan pembaruan iframe ditambahkan ke riwayat dokumen.
Robert Altman
Jika ke iFrame mengubah halaman, metode ini kehilangan navigasi
Eduardo Cuomo
10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
Lyfing
2
ini bekerja dengan sempurna untuk saya di chromedocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar
104

Ini akan membantu:

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

EDIT: Memperbaiki nama objek sesuai komentar @ Joro.

nfechner.dll
sumber
3
Ini tidak berfungsi di IE9. Anda harus menggunakan contentWindow, bukan contentDocument.
gotqn
1
Terima kasih atas jawabannya. Selain itu, Jika Anda harus secara positif me-refresh halaman lain ke halaman lain dalam iframe, alih-alih reload(true)Anda akan menggunakan ini:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101
15
Ini tidak berfungsi dengan iframe dengan asal berbeda (protokol, nama host, atau porta).
michelpm
18

asalkan iframe dimuat dari domain yang sama, Anda dapat melakukan ini, yang lebih masuk akal:

iframe.contentWindow.location.reload();
Horia Dragomir
sumber
7

Bekerja untuk IE, Mozzila, Chrome

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

Anda dapat menggunakan metode sederhana ini

function reloadFrame(iFrame) {

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

}
Vasile Alexandru Peste
sumber
2

Dapatkan ini dari sini

var f = document.getElementById('iframe1');
f.src = f.src;
Amarghosh
sumber
Jika ke iFrame mengubah halaman, metode ini kehilangan navigasi
Eduardo Cuomo
2

2017:

Jika di domain yang sama saja:

iframe.contentWindow.location.reload();

akan bekerja.

pery mimon
sumber
1

Berikut ini cuplikan HTML-nya:

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

Dan kode Javascript saya:

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

Mengatur ulang atribut src secara langsung:

iframe.src = iframe.src;

Menyetel ulang src dengan stempel waktu untuk perusakan cache:

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

Mengosongkan src saat opsi string kueri tidak dimungkinkan (URI Data):

var wasSrc = iframe.src

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

Jika Anda menggunakan jalur hash (seperti mywebsite.com/#/my/url) yang mungkin tidak menyegarkan bingkai saat beralih hash:

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

Sayangnya, jika Anda tidak menggunakan waktu tunggu, JS dapat mencoba mengganti bingkai sebelum halaman selesai memuat konten (dengan demikian memuat konten lama). Saya belum yakin dengan solusinya.

NotoriousPyro
sumber
0

Jika Anda memiliki Beberapa iFrame di dalam halaman, maka skrip ini mungkin berguna. Saya berasumsi ada nilai tertentu di sumber iFrame yang dapat digunakan untuk menemukan iFrame tertentu.

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;

Ganti "/ SumberAnda" dengan nilai yang Anda butuhkan.

sarvesh singh
sumber
0

Jika URL iframe Anda tidak berubah, Anda dapat membuatnya kembali.

Jika iframe Anda tidak berasal dari asal yang sama (skema protokol, nama host, dan port), Anda tidak akan dapat mengetahui URL saat ini di iframe, jadi Anda memerlukan skrip dalam dokumen iframe untuk bertukar pesan dengan jendela induknya ( jendela halaman).

Dalam dokumen iframe:

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

Di halaman Anda:

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

Anda dapat menggunakan ini:

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
sumber
1
Pertanyaannya tidak ada hubungannya dengan pustaka JavaScript populer yang disebut jQuery.
John Weisz
Apa yang akan dilakukan Math.round ()? Ini terlihat sangat tidak berguna di sini.
Davide R.
Hai, saya menggunakan Math.round () Karena Beberapa Browser dapat menyimpan Url - halaman sehingga penyegaran tidak berfungsi.
Ferhat KOÇER