Javascript kullanarak bir IFrame nasıl yenilenir?


Yanıtlar:


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

2
Chrome'un bu sürümünde benim için çalışıyor:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth

3
Bilginize - Şu anda (Ocak 2013 itibariyle ), iframe güncellemelerinin belge geçmişine eklenmesine neden olan bir Chromium proje hatası ( code.google.com/p/chromium/issues/detail?id=172859 ) bulunmaktadır.
Robert Altman

İFrame'e sayfa değiştirilirse, bu yöntem navigasyonu kaybetti
Eduardo Cuomo

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

2
krom benim için bu mükemmel çalışmadocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zülfikar

104

Bu yardımcı olmalı:

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

DÜZENLE: @ Joro'nun yorumuna göre nesne adı düzeltildi.


3
Bu IE9'da çalışmıyor. ContentDocument yerine contentWindow kullanmalısınız.
gotqn

1
Cevap için teşekkürler. Ek olarak, iframe içinde başka bir sayfanın başka bir sayfaya yenilenmesine olumlu bir şekilde neden olmanız gerekiyorsa, bunun yerine şunu reload(true)kullanırsınız:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101

15
Bu, farklı kökenlere sahip iframe'lerde (protokol, ana bilgisayar adı veya bağlantı noktası) çalışmaz.
michelpm

18

iframe'in aynı alandan yüklenmesi koşuluyla, bunu yapabilirsiniz, bu biraz daha mantıklıdır:

iframe.contentWindow.location.reload();

7

IE, Mozzila, Chrome için çalışıyor

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

4

Bu basit yöntemi kullanabilirsiniz

function reloadFrame(iFrame) {

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

}


2

2017:

Aynı alan adındaysa:

iframe.contentWindow.location.reload();

çalışacak.


1

İşte HTML pasajı:

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

Ve benim Javascript kodum:

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

1

Src özelliğini doğrudan sıfırlamak:

iframe.src = iframe.src;

Önbellek bozma için src'yi bir zaman damgasıyla sıfırlama:

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

Sorgu dizeleri seçeneği mümkün olmadığında src'yi temizleme (Veri URI'si):

var wasSrc = iframe.src

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

1

Karma yollar kullanıyorsanız (mywebsite.com/#/my/url gibi), karma geçişte çerçeveleri yenilemeyebilir:

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

Maalesef, zaman aşımını kullanmazsanız JS, sayfa içeriği yüklemeyi bitirmeden (dolayısıyla eski içeriği yüklemeden) çerçeveyi değiştirmeyi deneyebilir. Henüz çözümden emin değilim.


0

Sayfanın içinde Birden Fazla iFrame varsa, bu komut dosyası faydalı olabilir. İFrame kaynağında, belirli iFrame'i bulmak için kullanılabilecek belirli bir değer olduğunu varsayıyorum.

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;

"/ YourSource" u ihtiyacınız olan değerle değiştirin.


0

İframe'inizin URL'si değişmezse, onu yeniden oluşturabilirsiniz.

İframe'iniz aynı kaynaktan değilse (protokol şeması, ana bilgisayar adı ve bağlantı noktası), iframe'deki geçerli URL'yi bilemezsiniz, bu nedenle iframe belgesinde üst penceresiyle mesaj alışverişi yapmak için bir komut dosyasına ihtiyacınız olacaktır ( sayfanın penceresi).

İframe belgesinde:

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

Sayfanızda:

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

-2

Bunu kullanabilirsiniz:

js:

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

Html:

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

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


1
Sorunun jQuery adlı popüler JavaScript kitaplığıyla hiçbir ilgisi yoktur .
John Weisz

Math.round () ne yapardı? Burada tamamen işe yaramaz görünüyor.
Davide R.

Merhaba Math.round () kullandım çünkü Bazı Tarayıcılar URL'yi önbelleğe alabilir - sayfayı yenileme çalışmıyor.
Ferhat KOÇER
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.