用jQuery重新加载一个iframe

我有一个页面上的两个iframe,一个更改另一个,但另一个iframe不显示更改,直到我刷新。 有没有简单的方法来刷新这个iframe与jQuery?

<div class="project"> <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe> </div> 

如果iframe不在不同的域上,你可以这样做:

 document.getElementById(FrameID).contentDocument.location.reload(true); 

但是,由于iframe在不同的域上,您将被相同的策略拒绝访问iframe的contentDocument属性。

但是,如果你的代码在iframe的父页面上运行,通过将其src属性设置为自身,你可以强迫跨域iframe重新加载。 喜欢这个:

 // hackishly force iframe to reload var iframe = document.getElementById(FrameId); iframe.src = iframe.src; 

如果您尝试从另一个iframe重新加载iframe,那么您运气不好, 是不可能的。

 $( '#iframe' ).attr( 'src', function ( i, val ) { return val; }); 

你也可以使用jquery。 这与Alex提出的仅仅使用JQuery是一样的:

  $('#currentElement').attr("src", $('#currentElement').attr("src")); 

用jQuery重新加载一个iframe

在iframe中做一个连接让我们用id =“reload”然后使用下面的代码

 $('#reload').click(function() { document.location.reload(); }); 

和所有的浏览器一起去吧。

用HTML重新加载iframe(无需Java脚本)

它有更简单的解决scheme:在(FF,Webkit)

只需在您的iframe中做一个锚点

  <a href="#" target="_SELF">Refresh Comments</a> 

当你点击这个锚点时,只需刷新你的iframe

但是,如果你有参数发送到您的iframe然后按照如下。

  <a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a> 

不需要任何页面url,因为 – > target =“_ SELF”为你做

与jQuery的你可以使用这个:

 $('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src')); 

只是回报亚历克斯的答案,但与jQuery

 var currSrc = $("#currentElement").attr("src"); $("#currentElement").attr("src", currSrc); 

如果你是跨域的,简单的设置src回到同一个url不会总是触发一个重载,即使位置hash改变了。

在手动构buildTwitterbutton的iframe时遇到这个问题,当我更新url时不会刷新。

像buttonTwitter的forms: .../tweet_button.html#&_version=2&count=none&etc=...

由于Twitter使用文档片段的URL,更改散列/片段没有重新加载源,并且button目标没有反映我新的ajax加载的内容。

你可以附加一个查询string参数来强制重载(比如: "?_=" + Math.random()但这会浪费带宽,特别是在这个例子中,Twitter的方法是专门尝试启用caching。

要重新加载只有散列标签更改的内容,您需要删除该元素或更改src ,等待该线程退出,然后重新分配。 如果页面仍然被caching,这不应该要求networking命中,但会触发帧重新加载。

  var old = iframe.src; iframe.src = ''; setTimeout( function () { iframe.src = old; }, 0); 

更新 :使用此方法会创build不需要的历史logging项目。 相反,每次都要移除并重新创buildiframe元素,这会使back()button按预期工作。 也不错,不要有计时器。

我很确定上面的所有例子只重新加载iframe与其原始的src,而不是其当前的URL。

 $('#frameId').attr('src', function () { return $(this).contents().get(0).location.href }); 

这应该使用当前的URL重新加载。

只是回报亚历克斯的答案,但与jQuery:

 var e = $('#myFrame'); e.attr("src", e.attr("src")); 

或者你可以使用小function:

 function iframeRefresh(e) { var c = $(e); c.attr("src", c.attr("src")); } 

我希望它有帮助。

这是另一种方式

 $( '#iframe' ).attr( 'src', function () { return $( this )[0].src; } ); 
 $('IFRAME#currentElement').get(0).contentDocument.location.reload() 

这可以用简单的JavaScript来实现。

  • 在iFrame1中,创build一个在body标签onload中调用的JavaScript函数。 我有它检查我设置的服务器端variables,所以它不会尝试在iframe2中运行JavaScript函数,除非我在iframe1中采取了特定的操作。 你可以把它设置为一个button按下或者你想要在iframe1中触发的函数。
  • 然后在iframe2中,我有下面列出的第二个函数。 iframe1中的函数基本上转到父页面,然后使用window.frames语法在iframe2中触发JavaScript函数。 只要确保使用iframe2的id / name而不是src
 //function in iframe1 function refreshIframe2() { if (<cfoutput>#didValidation#</cfoutput> == 1) { parent.window.frames.iframe2.refreshPage(); } } //function in iframe2 function refreshPage() { document.location.reload(); } 
  ifrX =document.getElementById('id') //or ifrX =frames['index']; 

跨浏览器的解决scheme是:

  ifrX.src = ifrX.contentWindow.location 

这在<iframe>是<form>的目标时特别有用

解决了! 我注册到stockoverflow只是为了向您分享唯一的解决scheme(至less在ASP.NET / IE / FF / Chrome)的工作! 这个想法是用当前的innerHTML值replacediv的innerHTML值。

这里是HTML片段:

 <div class="content-2" id="divGranite"> <h2>Granite Purchase</h2> <IFRAME runat="server" id="frameGranite" src="Jobs-granite.aspx" width="820px" height="300px" frameborder="0" seamless ></IFRAME> </div> 

和我的Javascript代码:

 function refreshGranite() { var iframe = document.getElementById('divGranite') iframe.innerHTML = iframe.innerHTML; } 

希望这可以帮助。

你需要使用

[0]的.src

findiframe的来源和它的URL需要在父母的同一个域。

 setInterval(refreshMe, 5000); function refreshMe() { $("#currentElement")[0].src = $("#currentElement")[0].src; } 

//刷新页面上的所有iframe

 var f_list = document.getElementsByTagName('iframe'); for (var i = 0, f; f = f_list[i]; i++) { f.src = f.src; } 

下面的解决scheme肯定会工作:

 window.parent.location.href = window.parent.location.href;