重新加载后,iframe中的OnLoad事件未在IE8中触发

时间:2011-12-14 17:17:12

标签: javascript jquery internet-explorer iframe internet-explorer-8

我的页面上有一个iframe,我正在尝试重新加载内容。在所有其他浏览器中,只需执行以下操作即可实现:

$('#myFrame').contentWindow.location.reload(true)

然而,这在IE中不起作用(在9和8中测试),我发现我可以通过克隆iframes容器来重新加载,将克隆添加到页面并删除原始iframe,如下所示:< / p>

var pe = $(window.parent.frames['myFrame'].frameElement.parentElement);
clonedPe = pe.clone();
clonedPe.insertBefore(pe);
pe.remove();

我遇到的问题是,在原始的iframe中,我将一些代码添加到onload事件中,但是在克隆的iframe的加载中不会触发此事。

我的问题是....有没有更好的方法在IE中重新加载iframe - 或者 - 如何在重新加载时触发onload事件!?!

2 个答案:

答案 0 :(得分:0)

如果您更改iframe的来源,则会重新加载:

var pe = $(window.parent.frames['myFrame'].frameElement.parentElement);
$.data(pe, 'src', pe.attr('src'));
pe.attr('src', 'about:blank').attr('src', $.data(pe, 'src'));

以下是演示:http://jsfiddle.net/4ZgKh/1/

您还可以使用.delegate()将事件绑定到iframe,这样事件处理程序将对绑定事件处理程序后插入DOM的任何匹配元素保持为true:

$(document).delegate('iframe', 'load', function () {...});

请注意,在jQuery 1.7及更高版本中,perferred方法是:

$(document).on('load', 'iframe', function () {...});

答案 1 :(得分:0)

这在FF和IE9中工作正常。

$('#myFrame').get(0).contentWindow.location.reload(true);