IE で obj.scrollHeight が正しい値を返さない問題


<iframe> の中のコンテンツの高さを測って高さを変える、というスクリプトを提供している。

これがIE8で動かないという問い合わせを受けたので調べてみたらIE7でも動かない。うそお。動作確認したと思ったのに…。他のスクリプトの影響か?ついIEを無視してしまったんだっけ?今まで問合せ来ないってどうよ (T T) 役に立ってないのか…。

直接の原因は<iframe>内ページのコンテンツ高さが obj.scrollHeight で取得できない事。IE以外のブラウザではOK。バグ、という報告もある。しかし落ち着いて調べたらうまく行っているページもある…。

原因はDTD宣言。HTML Transitional 4.01 の場合のみ、DTDのURL表記が無いDTD宣言だとオブジェクトの高さが取得できなかった。

結果は以下の通り。IE7およびIE8で確認。

HTML4.01 Transitional DTDのURLなし

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
ダメ

HTML4.01 Transitional DTDのURLあり

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
OK

HTML4.01 Strict

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>
OK

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”>
OK

XHTML1.0 Transitional

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
OK

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”>
OK

XHTML1.0 Strict

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
OK

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”>
OK

XHTML1.1

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>
OK

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN”>
OK

HTML5

<!DOCTYPE html>
OK