例如:
<iframe name="Stack" src="http://stackoverflow.com/" width="740"
frameborder="0" scrolling="no" id="iframe"> ...
</iframe>
我希望它能够根据里面的内容来调整它的高度,而不使用滚动。
例如:
<iframe name="Stack" src="http://stackoverflow.com/" width="740"
frameborder="0" scrolling="no" id="iframe"> ...
</iframe>
我希望它能够根据里面的内容来调整它的高度,而不使用滚动。
当前回答
hjpotter92的答案在某些情况下足够好,但我发现iframe内容经常在Firefox和IE中被底部剪辑,而在Chrome中很好。
以下工作很好为我和修复剪辑问题。该代码可以在http://www.dyn-web.com/tutorials/iframes/height/上找到。我做了轻微的修改,将onload属性从HTML中删除。把下面的代码放在<iframe> HTML后面和</body>结束标记之前:
<script type="text/javascript">
function getDocHeight(doc) {
doc = doc || document;
// stackoverflow.com/questions/1145850/
var body = doc.body, html = doc.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
return height;
}
function setIframeHeight(id) {
var ifrm = document.getElementById(id);
var doc = ifrm.contentDocument? ifrm.contentDocument:
ifrm.contentWindow.document;
ifrm.style.visibility = 'hidden';
ifrm.style.height = "10px"; // reset to minimal height ...
// IE opt. for bing/msn needs a bit added or scrollbar appears
ifrm.style.height = getDocHeight( doc ) + 4 + "px";
ifrm.style.visibility = 'visible';
}
document.getElementById('ifrm').onload = function() { // Adjust the Id accordingly
setIframeHeight(this.id);
}
</script>
你的iframe HTML:
<iframe id="ifrm" src="some-iframe-content.html"></iframe>
请注意,如果您更喜欢在文档的<head>中包含Javascript,那么您可以恢复到在iframe HTML中使用内联onload属性,就像在dyn-web web页面中一样。
其他回答
将此添加到<head>部分:
<script>
function resizeIframe(obj) {
obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px';
}
</script>
把你的iframe改成这样:
<iframe src="..." frameborder="0" scrolling="no" onload="resizeIframe(this)" />
在现场讨论中发现。
jQuery的.contents()方法允许我们在DOM树中搜索元素的直接子元素。
jQuery:
$('iframe').height( $('iframe').contents().outerHeight() );
记住,在iframe内的页面主体必须有它的高度
CSS:
body {
height: auto;
overflow: auto
}
hjpotter92的答案在某些情况下足够好,但我发现iframe内容经常在Firefox和IE中被底部剪辑,而在Chrome中很好。
以下工作很好为我和修复剪辑问题。该代码可以在http://www.dyn-web.com/tutorials/iframes/height/上找到。我做了轻微的修改,将onload属性从HTML中删除。把下面的代码放在<iframe> HTML后面和</body>结束标记之前:
<script type="text/javascript">
function getDocHeight(doc) {
doc = doc || document;
// stackoverflow.com/questions/1145850/
var body = doc.body, html = doc.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
return height;
}
function setIframeHeight(id) {
var ifrm = document.getElementById(id);
var doc = ifrm.contentDocument? ifrm.contentDocument:
ifrm.contentWindow.document;
ifrm.style.visibility = 'hidden';
ifrm.style.height = "10px"; // reset to minimal height ...
// IE opt. for bing/msn needs a bit added or scrollbar appears
ifrm.style.height = getDocHeight( doc ) + 4 + "px";
ifrm.style.visibility = 'visible';
}
document.getElementById('ifrm').onload = function() { // Adjust the Id accordingly
setIframeHeight(this.id);
}
</script>
你的iframe HTML:
<iframe id="ifrm" src="some-iframe-content.html"></iframe>
请注意,如果您更喜欢在文档的<head>中包含Javascript,那么您可以恢复到在iframe HTML中使用内联onload属性,就像在dyn-web web页面中一样。
jq2('#stocks_iframe').load(function(){
var iframe_width = jq2('#stocks_iframe').contents().outerHeight() ;
jq2('#stocks_iframe').css('height',iframe_width); });
<iframe id='stocks_iframe' style='width:100%;height:0px;' frameborder='0'>
hjpotter92的建议在safari中不起作用! 我对脚本做了一个小的调整,所以它现在也可以在Safari中工作。
唯一的改变是在每次加载时将高度重置为0,以使某些浏览器能够降低高度。
将这个添加到<head>标签:
<script type="text/javascript">
function resizeIframe(obj){
obj.style.height = 0;
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
}
</script>
并将以下onload属性添加到iframe,如下所示
<iframe onload='resizeIframe(this)'></iframe>