我有一些页面加载到父页面中的 iframe 中,我正在使用 postMessage 将子页面的高度发送给父页面,以便它可以调整 iframe 的大小。子页面非常简单,为了找到正文的高度而拥有额外的 jQuery 大小似乎是一种耻辱。但是,到目前为止,我还没有能够在直接的 JavaScript 中复制上述调用的效果。
我尝试了应用于 body 和 body.documentElement 的 scrollHeight、offsetHeight 和 clientHeight 的不同组合,但都不匹配。而且它们在不同的浏览器中非常不同,尤其是当您在大小差异很大的子文档之间切换时。以下是所有子页面的 onload 事件处理程序的实际代码:
window.onload = function() {
alert("height(1) = " + document.body.scrollHeight + "\n" +
"height(2) = " + document.documentElement.scrollHeight + "\n" +
"height(3) = " + document.body.offsetHeight + "\n" +
"height(4) = " + document.documentElement.offsetHeight + "\n" +
"height(5) = " + document.body.clientHeight + "\n" +
"height(6) = " + document.documentElement.clientHeight + "\n" +
"height(7) = " + $('body').outerHeight(true)
);
parent.postMessage($('body').outerHeight(true) + "px", "*");
}
在每种情况下,前六个值都不匹配每个浏览器(IE8/FF/Chrome)中的第七个值。第二个是最近的,但是当从一个大的子页面切换到一个较小的页面时,它在 Chrome 中失败了——它仍然给出了前一页的大小。
我确实阅读了 jQuery 的源代码,但我的 JavaScript 还不够好,无法弄清楚它在做什么。