在IE/Firefox/Safari中计算自动IFrame高度-正确的方法是什么?

在IE/Firefox/Safari中计算自动IFrame高度-正确的方法是什么?,iframe,Iframe,我浏览了很多网站,在这里,并没有找到一个最终的答案,因为每个人都有自己的错误。 我需要有一个自动的IFrame高度,这意味着如果内容发生变化,IFrame必须 根据内容调整其高度。 为此,我需要了解如何获得正确的内容高度 据我所知,最正确的方法是使用: document.getElementById('myIframe').style.pixelHeight=document.getElementById('myIframe').contentWindow.document.body.scrol

我浏览了很多网站,在这里,并没有找到一个最终的答案,因为每个人都有自己的错误。 我需要有一个自动的IFrame高度,这意味着如果内容发生变化,IFrame必须 根据内容调整其高度。 为此,我需要了解如何获得正确的内容高度

据我所知,最正确的方法是使用: document.getElementById('myIframe').style.pixelHeight=document.getElementById('myIframe').contentWindow.document.body.scrollHeight

但是,这并不是在所有浏览器中都能正常工作。在IE中,我看到高度太小(大约比应该的低8个像素)。在Firefox中,当减少内容大小时,滚动高度根本没有减少。在狩猎中,它也不起作用

那么,对于最后的问题,获得内容高度的最正确、最有效的方法是什么?IFrame应该设置多高

谢谢,
好吧。

IE的问题可能是。在IE中设置iframe高度时,它包含几个特殊iframe边框的像素。frameborder不算作正常的CSS边框,并且无法从脚本中动态关闭

您可以在IE中添加几个像素以补偿帧边框,或写入:

<iframe frameborder="0">
这完全是一个令人讨厌的黑客行为;iFrame专门设计为不响应文档大小。考虑在页面元素中使用,例如服务器端的模板内容,或者使用Ajax进行拖动。

< P>(文档)。 $($(“#msgContainer”)[0].contentWindow.load(函数(){


您好,谢谢您的回答,它非常有用。我已将代码更改为使用style.height,删除了填充和边距,现在在Firefox中它工作得非常完美。IE的问题确实在frameborder中得到了解决。现在我在文档的开头添加了以下内容:这意味着它不处于怪癖模式,对吗?在safari中,高度增加了,但在减少内容时不会减少。有什么想法吗?谢谢!Tal.document.compatMode为您提供“BackCompat”表示怪癖模式或“CSS1Compat”表示标准模式。(当iframe出现怪癖时,父文档可能处于标准中,反之亦然。)body.scrollHeight在Safari中似乎是错误的,但我认为offsetHeight通常会起作用。嗨,bobince,谢谢你!我真的只为Safari offsetHeight做了尝试,它确实起作用。它仍然有一些小滚动条,直到我在Iframe中添加了大约8px(Iframe没有任何填充或边距),但这要好得多!
style.height= number+'px';
        var offsetH = "";
        #if(!$request.userAgent.isIE())
            offsetH = $("#msgContainer")[0].contentWindow.document.body.offsetHeight;
        #else
            offsetH = $("#msgContainer")[0].contentWindow.document.body.scrollHeight;
        #end

        var minH = $($("#msgContainer")[0]).css('min-height');
        var height = $($("#msgContainer")[0]).css('height');

        if(offsetH > 250 ){
            $($("#msgContainer")[0]).css('min-height', '250px');
            $($("#msgContainer")[0]).css('height', '250px');
        }else{
            $($("#msgContainer")[0]).css('min-height', offsetH);
            $($("#msgContainer")[0]).css('height', offsetH);
        }
        console.log( offsetH + " : " + minH + " : " + height);
    });
});