获取跨域 iFrame 内文档的高度
Getting the height of a document that is inside of a Cross Domain iFrame
我在这里找到并使用以下堆栈溢出问题和答案。 我在 iFrame 中使用 iFrame,该框架引用回父域,以便将我的身高传达回父域。 我完全理解这个概念,并且很容易实现。 问题是,当我尝试从jQuery获取$(document).height()时,或者只是通过document.body.scrollHeight,当我的页面在iFrame中被引用时,我在所有浏览器中都看到了奇怪的结果。
以下是我的页面上发生的事情的一些背景。 我正在进行一些 ajax 调用来搜索第三方提供商的服务,并根据结果在我的页面内生成 html,这是非常标准的东西。 顺便说一下,在抓取文档的高度之前,我正在等待我的 html 被添加到 DOM 中。 以下是 $(document).height() 的结果,当我的页面位于 iFrame 中时。
FireFox 10.0.2,其中拾取的高度几乎比文档的实际高度小 1000 像素或更多。
谷歌浏览器 18.0.1025.162 大多数时候会选择正确的高度。 有时高度仅小几百像素。
Safari 5的行为也像FireFox一样。
我看过许多博客文章,其中的代码显示了该行为。 如果我使用 jQuery 还是 javascript 文档对象可用的内容并不重要。 我总是看到这些电话中的任何一个都返回不一致的结果。 我不得不相信其他使用过这种技术的人也遇到过这种情况。
我不需要显示我的代码来调整 iFrame 大小或帮助程序 iFrame,因为它们按预期运行。 我想展示的主要代码是在 ajax 事件和 dom 操作完成后如何从搜索表单开始调整大小过程:
function resizeMe() {
var iFrameHelper = $("#iFrameHelper");
iFrameHelper.attr("src", iFrameHelper.attr("data-url") + "?height=" + $(document).height() + "&cacheb=" + Math.random());
}
所以我最终弄清楚了问题所在。 $(document).height() 部分工作正常。 问题完全在于时机。 在 ajax 调用完成后,我在页面中呈现的项目包含导致请求从页面传出以获取图像的图像。 图像上没有设置默认高度,因此在我更改页面内 iFrame 上的 src 属性之前,没有正确计算高度,这会启动父级的大小调整。
我最终所做的只是默认我所有图像的高度,因为它们共享相同的尺寸。 我责怪iFrames而不是我自己。 为了这么简单的原因,我拔掉了2天的头发。
我希望这在未来对其他人有所帮助。
- 文档高度未达到全高
- 将“窗口高度”指定为“文档高度”
- 窗口宽度调整时更改字体大小,字体大小更改时更改文档高度
- 如果文档高度高于视口,请执行 X
- 将文档高度设置为负 100px
- 如何在浏览器中获取最大可用文档高度
- Windows Phone WebBrowser:获取文档高度的正确方法
- 文档高度占原始高度的百分比
- 将元素innerHTML替换为其自身的副本会更改文档高度
- 菜单位置相对于介质查询的文档高度
- 为什么不't此代码返回完整的文档高度
- javascript中元素/文档高度的事件侦听器
- 用JavaScript计算文档高度
- JavaFX webview,获取文档高度
- 真正跨浏览器获取文档高度的方法
- 我怎样才能让PhantomJS设置视口高度与屏幕捕获的文档高度相同?
- $(window).height()返回文档高度(但声明了doctype)
- 自动填充浏览器文档高度以滚动到任何元素
- 粘性页脚,直到文档高度大于视口
- javascript/jquery中更改了如何定义文档高度