在IE中检测具有PDF的iFrame的onload事件

时间:2012-10-05 07:29:19

标签: jquery internet-explorer iframe

我看到这个问题在这里被多次询问过。一些解决方案部分工作。这就是场景。我需要使用<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.尊重相同的原始政策。

2 个答案:

答案 0 :(得分: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上测试。

答案 1 :(得分:0)

$('#iframe').load<iframe onload="">不起作用。在IE浏览器中看起来无法访问PDF的iframe内容。因此,要跟踪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&amp; IE8。对于其他浏览器,可以检查以下内容 $('#iframe').contents().find('embed').attr('src')

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