如何使用Javascript刷新IFrame?

如何使用Javascript刷新IFrame?,javascript,iframe,Javascript,Iframe,我有一个带有IFrame和按钮的网页,一旦按下按钮,我需要刷新IFrame。这可能吗?如果可能,怎么可能?我搜索了一下,没有找到任何答案。这应该有帮助: var iframe = document.getElementById('youriframe'); iframe.src = iframe.src; document.getElementById('FrameID').contentWindow.location.reload(true); 编辑:根据@Joro的评论修复了对象名称。从

我有一个带有IFrame和按钮的网页,一旦按下按钮,我需要刷新IFrame。这可能吗?如果可能,怎么可能?我搜索了一下,没有找到任何答案。

这应该有帮助:

var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
document.getElementById('FrameID').contentWindow.location.reload(true);
编辑:根据@Joro的评论修复了对象名称。


如果iframe是从同一个域加载的,那么您可以这样做,这更有意义:

iframe.contentWindow.location.reload();

以下是HTML代码片段:

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

如果页面中有多个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;
var-iframes=document.getElementsByTagName('iframe');
var yourIframe=null
对于(var i=0;i-1){
yourIframe=iframes[i];
}   
}
var isosource=yourIframe.attributes.src.nodeValue;
yourIframe.src=isoource;

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

适用于IE、Mozzila和Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
您可以使用以下选项:

Js:

Html:

``

JS Fiddle:

如果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);

你可以使用这个简单的方法

function reloadFrame(iFrame) {

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

}

直接重置src属性:

iframe.src = iframe.src;
使用缓存破坏的时间戳重置src:

iframe.src =  iframe.src.split("?")[0] + "?_=" + new Date().getTime();
无法在查询字符串时清除src选项(数据URI):

2017年:

如果它位于同一域中,则只需执行以下操作:

iframe.contentWindow.location.reload();
会有用的

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

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

window.onhashchange=函数(){
setTimeout(函数(){
让frame=document.getElementById('myFrame');
如果(frame!==null){frame.replacetwith(frame);}
}, 1000);
}

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

这在IE9中不起作用。您应该使用contentWindow而不是contentDocument。谢谢您的回答。此外,如果您必须在iframe中积极地使另一个页面刷新到另一个页面,那么您将使用以下内容而不是
reload(true)
:document.getElementById('FrameID').contentWindow.location.replace(新url)这不适用于具有不同来源(协议、主机名或端口)的iFrame。它适用于我的Chrome版本:
版本24.0.1312.56 Ubuntu 12.04(24.0.1312.56-0ubuntu0.12.04.1)
仅供参考-目前(截至2013年1月)有一个Chrome项目错误()这将导致iframe更新添加到文档历史记录中。如果在iframe中更改页面,此方法将丢失导航
var tmp_src=iframe.src;iframe.src='';iframe.src=tmp_src
这在chrome
document.getElementById('frame_id').contentDocument.location.reload(true)中非常适合我
如果在iFrame中更改页面,此方法将丢失导航问题的可能副本与流行的JavaScript库jQuery无关。Math.round()会做什么?这看起来完全没用。嗨,我用了Math.round(),因为某些浏览器可以缓存Url页面,所以刷新不起作用。
iframe.src = iframe.src;
iframe.src =  iframe.src.split("?")[0] + "?_=" + new Date().getTime();
var wasSrc = iframe.src

iframe.onload = function() {
    iframe.onload = undefined;
    iframe.src = wasSrc;
}
iframe.contentWindow.location.reload();
<script>
    window.onhashchange = function () {
        window.setTimeout(function () {
            let frame = document.getElementById('myFrame');
            if (frame !== null) {frame.replaceWith(frame);}
        }, 1000);
    }
</script>