3

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

加载 iframe 后,我<embed>使用

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

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

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

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

有人可以帮忙吗?

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

4

2 回答 2

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>

内嵌框架 HTML

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

在 Windows 7、IE9 上测试。

于 2012-10-05T07:59:42.393 回答
0

$('#iframe').load<iframe onload="">不起作用。看起来在 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')

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

于 2012-10-10T14:01:07.623 回答