我有一些页面加载到父页面的iframe中,我使用postMessage将子页面的高度发送到父级,以便它可以调整iframe的大小。子页面非常简单,使用jQuery只是为了找到body的高度似乎有些浪费。然而,我尝试使用纯JavaScript来复制上述调用的效果,但至今未能成功。
我尝试过将scrollHeight、offsetHeight和clientHeight应用于body和body.documentElement,但是它们都不匹配。在不同的浏览器中它们差异很大,特别是在切换不同大小的子文档时。以下是所有子页面的onload事件处理程序的实际代码:
我尝试过将scrollHeight、offsetHeight和clientHeight应用于body和body.documentElement,但是它们都不匹配。在不同的浏览器中它们差异很大,特别是在切换不同大小的子文档时。以下是所有子页面的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水平还不够好,无法弄清楚它在做什么。