【问题标题】:Detecting onload event in IE for iFrame which has PDF在 IE 中检测具有 PDF 的 iFrame 的 onload 事件
【发布时间】:2012-10-05 07:29:18
【问题描述】:

我看到这个问题在这里被问了很多次。一些解决方案部分有效。这就是场景。我需要使用<embed> 加载具有pdf 的iframe。有可能找不到 PDF,我将在 iFrame 中显示错误页面。

加载 iframe 后,我使用

查找 <embed> 标签

$('#iframe').contents().find('embed')

我尝试使用$('#iframe').load()。这适用于 Firefox、Chrome,但不适用于 IE。

还尝试使用$('#iframe').ready()。这在 IE 中有效,但是,

$('#iframe').contents().find('embed') 不起作用。

有人可以帮忙吗?

编辑: IE 版本:7 或 8。遵守同源政策。

【问题讨论】:

  • 您可能需要验证:您的父级和 iframe 是否使用相同的 document.domain? IE 对 iframe 和跨域脚本的安全性非常敏感...
  • 当我将浏览器模式切换到 IE7 或 IE8 时,它仍然适用于我的测试设置。 jQuery 版本?
  • 我尝试使用code.jquery.com/jquery-1.3.2.min.js,但我的小型测试设置仍然有效。我不知道这是不是因为我在本地看这个。您是否在您的网站上尝试过这个简单的测试设置,看看问题是否真的与此相关?
  • @IvanL :它在本地有效。但是,在服务器上运行时,IE7 会给出“需要对象”或“未找到此类接口”错误。

标签: jquery internet-explorer iframe


【解决方案1】:

您使用的是哪个版本的 jquery 和 IE?我做了一个如下的小测试设置,它工作得很好......

主 HTML

<html>
    <head>
        <title>TEST</title>
        <script src="jquery-1.8.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $('iframe').ready(function(){
                var tag = $('#iframe').contents().find('embed');
                alert(tag.attr('src'));
            });
        </script>
    </head>
    <body>
        <iframe id="iframe" src="pdf.html">
    </body>
</html>

Iframe HTML

<html>
    <body>
        <embed src="mypdf.pdf"/>
    </body>
</html>

在 Windows 7、IE9 上测试。

【讨论】:

  • 感谢您的回复。如果 embed 是强制编写的,它可以工作。代替 pdf.html,如果 Servlet 在响应流中打印 PDF,IE 将在 iFrame 中引入嵌入。在这种情况下,无法访问 embed。
  • 我明白了,PDF 是在没有嵌入的情况下直接打印的,IE 引入了一种幽灵嵌入来包含您无法访问的 PDF。很高兴我能帮助您找到问题的根源并解决它。
  • 抱歉,问题没有解决。我仍然需要验证 iFrame 是否包含 PDF。 $('#iframe').contents().find('embed') 在 IE 中不起作用 :( 就像 &lt;iframe src="link-to-get-pdf-inline"&gt;&lt;/iframe&gt; 所以 IE 添加了嵌入并且不允许我们访问它
  • 嗯然后我误解了你的最后一条消息。所以现在的问题是,当您的 servlet 打印 PDF 时,您遇到了问题,而当您编写嵌入标签时,它可以工作吗?您是否尝试过让 servlet 写出嵌入而不是仅写出 PDF?我担心您需要发布一些创建您的页面的代码,以便我们查找它不起作用的原因。
  • 谢谢。你的回答确实帮助了我。所以我为你的答案添加了+1。看来我解决了。很快就会发布答案。
【解决方案2】:

$('#iframe').load&lt;iframe onload=""&gt; 不起作用。看起来在 IE iframe 中无法访问 PDF 的内容。因此,要跟踪 iFrame 加载,可以使用以下代码。

$(window).load(function() { 
    try {
            var s = window.frames[ "iframeName" ].document.body.childNodes[0].innerHTML;
            if(s.indexOf('My error message') > 0) {
                alert('Error');
            } else {
                alert('PDF');
            }
        } catch (err) {
            if($.trim(err.message) != 'Access is denied.') {
                alert('PDF');
            } else {
                alert('Error');
            }
        }
});

因此,如果发现错误消息“我的错误消息”,则它是自定义设计的错误页面,其中包含该消息,否则它是 PDF。

以上解决方案适用于 IE7 & IE8。对于其余浏览器,可以检查以下内容 $('#iframe').contents().find('embed').attr('src')

不是一个直接的解决方案。但对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 2014-06-18
    • 2014-11-02
    • 2017-03-08
    • 2013-10-29
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多