如何使用JavaScript刷新iframe?


Answers:


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

2
它在以下版本的Chrome中对我有效:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth 2013年

3
仅供参考-当前(截至2013年1月)有一个Chromium项目错误(code.google.com/p/chromium/issues/detail?id=172859),该错误会导致iframe更新添加到文档历史记录中。
罗伯特·奥特曼

如果进入iFrame更改页面,此方法将失去导航
Eduardo Cuomo 2013年

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

2
这对我最适合使用Chrome浏览器document.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar

104

这应该有助于:

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

编辑:固定对象名称按照@Joro的注释。


3
这在IE9中不起作用。您应该使用contentWindow而不是contentDocument。
gotqn 2012年

1
感谢你的回答。此外,如果您必须积极地刷新iframe中的另一个页面,则reload(true)可以使用以下方法代替它:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101 2014年

15
这不适用于具有不同来源(协议,主机名或端口)的iframe。
michelpm

18

如果iframe是从同一个域加载的,则可以执行此操作,这更有意义:

iframe.contentWindow.location.reload();


4

您可以使用这种简单的方法

function reloadFrame(iFrame) {

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

}


2

2017年:

如果在同一域中,则:

iframe.contentWindow.location.reload();

将工作。


1

这是HTML代码段:

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

和我的Javascript代码:

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

1

直接重置src属性:

iframe.src = iframe.src;

用时间戳记重置src以清除缓存:

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

无法使用“查询字符串时清除src”选项(数据URI):

var wasSrc = iframe.src

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

1

如果您使用哈希路径(例如mywebsite.com/#/my/url),则可能无法在切换哈希时刷新帧:

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

不幸的是,如果您不使用超时,则JS可能会尝试在页面加载完内容之前(因此加载旧内容)替换框架。我尚不确定解决方法。


0

如果页面内有多个iFrame,则此脚本可能会很有用。我假设iFrame源中有一个特定值,可用于查找特定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;

将“ / yourSource”替换为所需的值。


0

如果iframe的URL不变,则可以重新创建它。

如果您的iframe不是来自同一来源(协议方案,主机名和端口),则您将无法知道iframe中的当前URL,因此您将需要iframe文档中的脚本才能与其父窗口交换消息(页面窗口)。

在iframe文档中:

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

在您的页面中:

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

-2

您可以使用此:

Js:

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

HTML:

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

JS小提琴:https : //jsfiddle.net/wpb20vzx/


1
这个问题与流行的称为jQuery的JavaScript 无关。
约翰·威兹

Math.round()会做什么?在这里看起来完全没用。
Davide R.

嗨,我使用Math.round()因为某些浏览器可以缓存Url-页面,所以刷新无法正常工作。
FerhatKOÇER15年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.