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

onload event for dynamically created iframe never fires in IE

本文关键字:永远 IE iframe 创建 onload 事件 动态      更新时间:2023-09-26

我有一个问题,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/

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

已经报告了这个bug,并且有一个解决方法。

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

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

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

使用jquery。

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

$(" #内容"). html (iframe);iframe.load myFunction ();