用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;