【发布时间】:2013-12-19 07:07:42
【问题描述】:
我在使用IFrame 和jQuery.Contents 时遇到了一个非常奇怪的情况。
我们有许多内置在单独页面中的报告,以及一个使用 jQuery 选项卡同时显示多个此类页面的显示页面。
这些报告的大小根据数据和用户输入的不同而不同,因为它们可以变化,我们需要动态地将 IFrame 的高度设置为内容的高度。为了获得内容的高度,我使用以下代码:
var iframeHeight = $(this).contents().height();
iframeHeight += 50;
console.log(iframeHeight);
此代码在第一次加载时运行良好,但在 IFrame 回发/刷新之后,记录的 iframeHeight 始终比之前的高度高 83px,无论子页面的实际内容如何。
i.e. First report is 500px high,
Second report should be 300px high
but $(this).contents().height(); returns 583px.
这里有一个例子jsFiddle 来演示这个问题。如果您打开控制台,然后单击 IFrame 左上角的 JSFiddle 图标,您会注意到记录的高度将比以前增加 83px。
- 有什么可以解释这个问题的吗?
- 我是否错过了
jQuery.Contents函数的工作原理? - 如果这样不起作用,是否有更好的方法来获取内容高度? (我试过 body 的高度 +
form对象的高度,但这在 IE 中不起作用)。
在 IE10 + Chrome 版本 31.0.1650.57 m 中对此进行了测试
【问题讨论】:
-
这个demo 工作正常.. 与您的示例的唯一区别是内容不会尝试调整到高度(就像 fiddle.jshell.net 一样.. 和还有调整元素大小等的脚本。)
-
@GabyakaG.Petrioli - 感谢您的提琴,您将我引向为什么它继续增长的问题(这是因为
+=50)。但是,您的解决方案没有考虑到回发后内容可以改变高度。这是更新后的jsFiddle 内容更改,如果您单击链接“此链接到更小的内容”,即使内容更少,记录的高度值仍然相同。 -
刚刚添加了答案.. 我认为最安全的是定位
iframe的contentDocument.documentElement并使用outerHeight(true)来考虑可能存在的边距/填充..
标签: javascript jquery asp.net iframe