Javascript 使用jQuery重新加载iframe

Javascript 使用jQuery重新加载iframe,javascript,jquery,html,iframe,Javascript,Jquery,Html,Iframe,我在一个页面上有两个iframe,其中一个对另一个进行更改,但另一个iframe在我刷新之前不会显示更改。有没有一种简单的方法可以用jQuery刷新这个iframe <div class="project"> <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe> </div> 如果

我在一个页面上有两个iframe,其中一个对另一个进行更改,但另一个iframe在我刷新之前不会显示更改。有没有一种简单的方法可以用jQuery刷新这个iframe

<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,那么您运气不好,这是不可能的。

您也可以使用jquery。这与Alex仅使用JQuery时提出的相同:

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

只是重复Alex的回答,但是使用jQuery

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

这可以通过简单的JavaScript实现

  • 在iFrame1中,生成一个JavaScript函数,该函数在body标记onload中调用。我让它检查我设置的服务器端变量,因此它不会尝试在iframe2中运行JavaScript函数,除非我在iframe1中采取了特定的操作。您可以在iframe1中将其设置为通过按下按钮触发的函数,或者按照您希望的方式进行设置
  • 然后在iframe2中,您有下面列出的第二个函数。iframe1中的函数基本上转到父页面,然后使用
    window.frames
    语法在iframe2中启动JavaScript函数。只需确保使用iframe2的
    id
    /
    名称,而不是
    src
//iframe1中的函数
函数refreshIframe2()
{
如果(#didValidation#==1)
{   
parent.window.frames.iframe2.refreshPage();
}
}
//iframe2中的函数
函数刷新页面()
{   
document.location.reload();
}

使用jQuery重新加载iframe

在iframe中创建一个链接,比如id=“reload”,然后使用以下代码

$('#reload').click(function() {
    document.location.reload();
});
你很适合所有的浏览器


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

它有更简单的解决方案:在(FF,Webkit)中不使用javaScript即可工作

在你的iframe里做一个锚

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

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

   <a href="#" target="_SELF">Refresh Comments</a>
但是 如果您将参数发送到iframe,则按照以下步骤执行

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


不需要任何页面url,因为->target=“\u SELF”为您执行此操作

如果您跨域,仅将src设置回相同的url并不总是会触发重新加载,即使位置哈希发生更改

在手动构建Twitter按钮iFrame时遇到了这个问题,当我更新URL时,它不会刷新

类似Twitter的按钮有如下形式:
../tweet\u button.html#&\u version=2&count=none&etc=…

由于Twitter使用文档片段作为url,更改哈希/片段不会重新加载源代码,按钮目标也不会反映我新加载的ajax内容

您可以附加一个查询字符串参数来强制重新加载(例如:
”?=“+Math.random()
),但这将浪费带宽,特别是在这个示例中,Twitter的方法专门尝试启用缓存

要重新加载仅使用哈希标记更改的内容,您需要删除元素,或更改
src
,等待线程退出,然后将其分配回。如果页面仍在缓存中,则不需要网络命中,但会触发帧重新加载

 var old = iframe.src;
 iframe.src = '';
 setTimeout( function () {
    iframe.src = old;
 }, 0);
更新:使用这种方法会创建不需要的历史记录项。相反,每次都要删除并重新创建iframe元素,这样可以使此back()按钮按预期工作。没有计时器也很好

    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];
跨浏览器解决方案是:

    ifrX.src = ifrX.contentWindow.location

这非常有用,尤其是当jquery的目标是a时,您可以使用:

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

以下解决方案肯定有效:

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

解决了!我注册到stockoverflow只是为了向您分享唯一有效的解决方案(至少在ASP.NET/IE/FF/Chrome中是这样的)!想法是用div的innerHTML值替换其当前的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>

希望这能有所帮助。

我很确定上面的所有示例都只会使用其原始src而不是当前URL重新加载iframe

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

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

仅使用Alex的答案,但使用jQuery:

var e = $('#myFrame');
    e.attr("src", e.attr("src"));
也可以使用小功能:

function iframeRefresh(e) {
    var c = $(e);
        c.attr("src", c.attr("src"));
}
我希望有帮助。

这里有另一种方法

$( '#iframe' ).attr( 'src', function () { return $( this )[0].src; } );
你需要使用

[0].src

要查找iframe的源及其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;
                        }

你可以这样做

$('.refrech-iframe').click(function(){
        $(".myiframe").attr("src", function(index, attr){ 
            return attr;
        });
    });

iframe文档是否位于不同的域中?您是否可以访问iframe中显示的站点代码?显示更多代码--两个iframe的html,以及您用于进行更改的javascript代码。仅查看您目前包含的内容很难找出问题所在。我可以访问代码yes和iframe在另一条路上domain@Matt,不允许框架更改其他域上框架的内容。有关如何绕过此跨域脚本限制的示例,请参阅此:+1,仅对ID进行一次引用,不太可能更改一次,但会忘记other@NicolaeSurdu此外,此:
(函数(elem){elem.src=elem.src;}($('#iframe')[0]);
要从另一个iframe中重新加载一个iframe,请更改为:$('#iframe',window.parent.document.attr('src',function(i,val){return val;});在Internet Explorer javascript解决方案上,如
document.getElementById(FrameID).contentWindow.location.reload(true)
无法正常工作。这个答案效果更好。为什么jQuery?!当简单的js可用时,问题是如何用jQuery而不是Javascript来实现这一点。有关正确的jQuery,请参阅下面的Sime Vidas帖子
$('IFRAME#currentElement').get(0).contentDocument.location.reload()
var f_list = document.getElementsByTagName('iframe');

 for (var i = 0, f; f = f_list[i]; i++) {
                            f.src = f.src;
                        }
$('.refrech-iframe').click(function(){
        $(".myiframe").attr("src", function(index, attr){ 
            return attr;
        });
    });