在IE中未触发iFrame的加载事件

为什么在iFrames的IE中没有触发load事件?

请看一下这个例子 。

在FF和Chrome中完美按预期工作,但IE失败了。

我认为对于Internet Explorer中的iframe,您无法以编程方式设置该事件处理程序(onload),您需要在标记中指定它。

就像是:

  

否则IE只会忽略该function。

在添加处理程序之前,IE可能已经加载了内容(并触发了事件)。 我发现当我静态指定iframe src attr,并通过jquery添加$(x).load事件处理程序时,firefox(3.6.28)触发了我的处理程序,但IE(8.0.6001.18702)却没有。

我最终调整了我的测试程序,以便在添加$(x).load处理程序后通过javascript设置iframe src。 我的$(x).load处理程序在IE和Firefox中的相同点被调用(但是注意通过iframe onload属性添加的处理程序在IE和FF之间表现不同)。 这是我最终得到的:

          

……这里是Firefox“log”:

i1 / eb_mce_iframe_content.html实际加载了i1:

弗雷德狐狸。

/eb_mce_iframe_content.html实际加载了x:

弗雷德狐狸。

将处理程序直接分配给onload可在Chrome,FF和IE中运行(使用IE 8测试)。

 (function (selector) { var frame = $(selector).get(0); if (frame) { frame.onload = function () { alert('frame loaded.'); }; } })('#myframe'); 

如果你改变if ($.browser.safari || $.browser.opera) { line to if ($.browser.safari || $.browser.opera || $.browser.msie) { if ($.browser.safari || $.browser.opera) {使用jQuery中的JavaScript代码。 if ($.browser.safari || $.browser.opera || $.browser.msie) { 。 所以你有以下几点:

 $(function(){ var iFrames = $('iframe'); function iResize() { for (var i = 0, j = iFrames.length; i < j; i++) { iFrames[i].style.height = iFrames[i].contentWindow.document.body.offsetHeight + 'px';} } if ($.browser.safari || $.browser.opera || $.browser.msie) { iFrames.load(function(){ setTimeout(iResize, 0); }); for (var i = 0, j = iFrames.length; i < j; i++) { var iSource = iFrames[i].src; iFrames[i].src = ''; iFrames[i].src = iSource; } } else { iFrames.load(function() { this.style.height = this.contentWindow.document.body.offsetHeight + 'px'; }); } }); 

我为IE使用readystatechange事件。

 var $iframe = $(" 

在您的ID前面添加前缀“iframe”:

 $('iframe#myFrame').load(function() { ... }); 

另外尝试使用“ready”而不是“load”:

 $('#myFrame').ready(function() { alert("Loaded"); }); 

这应该工作。

Seis的答案是正确的,可以改进使用非全局/匿名函数。

 window.dummy_for_ie7 = function() { } var iframe = $('')[0]; iframe.attachEvent('onload', real_event_handler) 

令我惊讶的是,这很有效。

注意:即使在那次黑客攻击之后,iframe.onload = func()也无法正常工作。 你必须使用attachEvent。 去搞清楚。

注意:自然,此代码逐字不会在符合标准的UA中起作用。