【发布时间】:2016-01-02 13:45:39
【问题描述】:
正如标题所说,我正在尝试设置一个隐藏的 iframe 高度以匹配它的内容,但我一直得到非常不正确的高度。
我正在预加载一个包含内容的新(隐藏)iframe,我需要在 iframe 设置为由用户显示之前设置高度。
我一直在使用可以轻松看到很长时间的框架来执行此操作,但现在这些框架在加载时是隐藏的,它正在发挥作用。我浏览了 SO 的每个角落,尝试了很多基本功能的变体,但没有运气。
我尝试让 iframe 可见,设置高度然后隐藏它,但框架的快速闪烁没有吸引力。有没有一种我不知道从隐藏的 iframe 中获取 ACTUAL 内容高度的方法?
对 jquery 或纯 js 想法开放。这是我一直在使用的两个最常见的示例。
对此的任何建议将不胜感激。提前谢谢你。
// example 1
function resizeIframe(obj){
obj.style.height = 0;
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
}
portalDiv.append('<iframe src="" scrolling="no" style="display:none;"></iframe>');
$('iframe').last().attr('src', '/content.php').load(function() {
resizeIframe(this);
// should return 363px
// returns 1531px :(
});
// example 2
portalDiv.append('<iframe src="" scrolling="no" style="display:none;"></iframe>');
$('iframe').last().attr('src', '/content.php').load(function() {
var contentHeight = $(this).contents().find(".container").height();
$(this).height(contentHeight+"px")
// should return 363px
// returns 1531px :(
});
【问题讨论】:
-
尝试使用
style="visibility:hidden;"而不是display:none;。这将使 iframe 呈现为好像它具有布局一样,因此您的高度/宽度计算应该是准确的。 -
谢谢,我会试一试。可见性是否适用于 ie8?
-
是的,多年来它一直是 CSS 规范的一部分。它甚至适用于 IE6 :)
-
完美!结合使用可见性和显示无,我能够完全达到我想要的结果!谢谢。
标签: javascript iframe height