动态创建的iframe的onload事件永远不会在IE中触发

时间:2014-05-01 16:32:23

标签: javascript internet-explorer iframe

我的IE存在问题,其中iframe" onload / load"动态创建iframe时,事件将不会触发,将其源设置为pdf并将其附加到文档。

我需要监听事件的原因是因为我需要隐藏iframe直到帧加载,然后使用一些效果将其淡入视图。

我已经在我测试过的所有浏览器(Chrome,Firefox,Safari,移动版Safari)中都可以使用它,但它在IE8-> IE11中无效。

我已经看过很多关于IE如何解除onload事件的帖子,而且从我收集的内容来看,以下内容应该有效:

// listen for when the iframe's content has been loaded...
if (window.addEventListener)
    iframe.addEventListener("load", framedContentLoaded, false);
else if (window.attachEvent)
    iframe.attachEvent("onload", framedContentLoaded);
else
    iframe.onload = framedContentLoaded;

但是,我的函数framedContentLoaded永远不会在IE中被触发。

我创造了一个重​​现问题的小提琴:http://jsfiddle.net/s5TUU/

3 个答案:

答案 0 :(得分:1)

我有同样的问题,我使用浏览器检测和onreadystatechange事件来迎合IE,但后来它停止了IE11的工作。

This bug has been reported并且提到了一种解决方法。

解决方法是将pdf放入带有iframe的html页面,然后将该html页面加载到主iframe中。你将拥有嵌套的iframe,但它并不漂亮,但似乎与IE配合得很好。您将使用onload事件使其成为跨浏览器解决方案。 您需要使父级和子级iframe的大小相同,并禁用父级iframe上的滚动条,这样您就不会获得双滚动条。

在我的情况下我使用ASP.Net MVC,我设置我的父iframe src来调用控制器动作,并将pdf url作为url参数传递。该操作返回了一个带有子iframe的视图,并将pdf分配给了它的src。

答案 1 :(得分:0)

一个简单的解决方案就是简单地使用Google Viewer for PDF。这不仅显示了PDF,而且onLoad属性无疑也会起作用。 Google Viewer:https://docs.google.com/viewer我还应该注意,在网页上嵌入PDF的正确方法是使用embed标记,而不是iframe。也许,您可以尝试使用onreadystatechange事件吗?

答案 2 :(得分:0)

使用jquery为此。

Var iframe = $("");  iframe.attr( .... )

$("#含量&#34)。HTML(IFRAME);  iframe.load(myFunction的);