【发布时间】:2014-05-28 06:14:45
【问题描述】:
我正在尝试使用 postMessage API 将我的页面高度从 iframe 发送到父页面。这个想法是,当 iframed 页面的总页面高度发生变化时,它将将该高度发送给父级。然后父级将调整 iframe 的高度以匹配。我目前在最新的 Google Chrome 中运行良好。
不幸的是,我在使用 IE9/10/11 和 Firefox 时遇到了问题。一旦 .scrollHeight 设置为最大,它就会保持在那里。尝试发送较小的高度只会发送之前的最高高度,即使原始页面的高度要小得多。
我认为这可能是因为页面所在的 iframe 影响了原始页面的高度。所以这实际上可能有一个CSS相关的解决方案?
这是我整理的一个简化的测试用例。此父页面包含一个 iframe,其中包含一个页面,该页面可以使用我添加的两个按钮来增加和减少其自身的高度。此外,第三个按钮获取页面高度并使用 postMessage API 将其发送给父级。
示例页面: http://iaviglobal.com/parent.html
我已将发送和接收的高度记录在控制台中。通过添加橙色块并发送文档高度来测试功能。然后隐藏橙色块并再次发送高度。在最新的 Chrome 中运行良好,在 IE 和 FF 中效果不佳。
任何帮助将不胜感激。
编辑:我已经确定如果我使用除<html> 和<body> 之外的任何元素的高度,我可以避免这个问题。例如,报告<div id="main"> 的高度将给出一个准确的数字,而与浏览器无关。 <html> 和 <body> 似乎报告了 IE 和 Firefox 中的完整 iframe 高度,即使其中的内容没有填满那么多空间。
但是,如果我能得到准确的<html> 或<body> 高度而不是使用<div>,那仍然是首选。
【问题讨论】:
标签: javascript html css iframe