【问题标题】:onload event for dynamically created iframe never fires in IE动态创建的 iframe 的 onload 事件永远不会在 IE 中触发
【发布时间】:2014-06-18 04:30:48
【问题描述】:

我遇到了 IE 问题,当我动态创建 iframe、将其源设置为 pdf 并将其附加到文档时,iframe 的“onload/load”事件不会触发

我需要监听该事件的原因是因为我需要隐藏 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/

【问题讨论】:

  • 您找到解决方案了吗?
  • @membersound,很遗憾,没有。

标签: javascript internet-explorer iframe


【解决方案1】:

我遇到了同样的问题,我正在使用浏览器检测和 onreadystatechange 事件来满足 IE 的需求,但后来它停止在 IE11 上工作。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,在我的真实用例中,我无法预测或控制将哪个页面设置为 iframe 源。有时它可能是页面、PDF 或重定向到 PDF 的页面。但也许我们可以进一步研究。
    【解决方案3】:

    为此使用 jquery。

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

    $("#content").html(iframe); iframe.load(myFunction);

    【讨论】:

    • 如果 iframe 的源是 pdf,load 中的函数永远不会被触发。
    • 这是真的!如果您将 pdf 转换为图像并从 ajax 加载它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2013-04-07
    • 2018-02-20
    • 2011-11-19
    相关资源
    最近更新 更多