iframe の高さを調節できるか

iframe 要素は原則、親ページで指定した幅・高さに固定されて子ページが表示される。しかし、

ので、今回は iframe で表示している子ページの高さを取得し、自動調整できないか色々と検証してみた。

検証コードは以下。

実際に動くデモは以下の GitHub Pages をドウゾ。

TL;DR : iframe 要素の動的なリサイズを精緻にやろうとすると、子ページの CSS 調整が重要で難易度が高い。クロスドメイン時はまたより面倒なので、こんなことガチではやろうとしない方が良い。


以降、文章でうまく伝わるか分からない、検証結果を書き連ねるが、無視してもらっていい。とにかく色んな要素が絡みついて、汎用的な方法があまりなく、面倒臭いことだけが確認できた。

「Auto Fit」ボタンを押すと、子ページの offsetHeight を見て iframe 要素の高さを調整している。

その他にも色々とボタンがあるが、コレは clientHeightoffsetHeightscrollHeight の値がどのように決まるのか調査するための諸々のボタン。

…ということだそうだ。

また、おさらいだが、

で、body 要素はデフォルトで margin を持つ。html 要素と body 要素にそれぞれ背景色を指定すると分かりやすいが、body 要素はデフォルトでコンテンツ分しか高さがなく、スクロールバーが出ないような少ないコンテンツ量だと、body 要素の下に html 要素が位置していることが確認できる。

このようなデフォルトスタイルになっているので、body 要素および子要素の margin をなくすか padding を付与するかして、ページ上部や下部に html 要素が見えるような margin を作らないようにしておかないと、documentElementoffsetHeight を見ても、若干縦スクロールバーが表示されてしまうような、奇妙な高さになってしまう現象が起こる。

本当は親ページの window.resize イベントの中で iframe 要素の高さを確認し、height 値を更新してやりたかったのだけど、この辺のスタイリングがイマイチなページだと offsetHeight の値がおかしくなって、無限にリサイズ処理が発生してしまってタブが死ぬので止めた。子ページの CSS 指定に制約が出来る時点で、頑張るのを止めた。w

親ページと子ページとのドメインが異なる場合は制約が出たりとか、何か色々面倒臭いみたい。コレ以上頑張るのは止めよう~と思った。w