親ページの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", "*");
}
最初の 6 つの値のいずれも、各状況で各ブラウザー (IE8/FF/Chrome) の 7 番目の値と一致しません。2 番目のページが最も近いですが、大きな子ページから小さなページに切り替えると、Chrome で失敗します。それでも前のページのサイズが表示されます。
私は jQuery のソースを読みましたが、私の JavaScript はそれが何をしているかを理解するのに十分ではありません。