社内の古(いにしえ)のWebサービスのメンテをしている過程で、InternetExplorer9以下の時、JavaScriptが正常に動いていない状況に出くわした…。未だに根本的な原因が分からず。誰か教えて…。

SCRIPT438: Object doesn't support property or method IE

これがF12の開発者ツールで表示されるエラー。

該当コード

<html>
<body>
<div id="hoge"></div>
<script>
hoge = document.getElementById("hoge"); // エラーにならない
function piyo() {
	hoge = document.getElementById("hoge"); // エラーになる
	var hoge = document.getElementById("hoge"); // エラーにならない
}
piyo();
</script>
</body>
</html>

これをIE9以下で表示させると上記のSCRIPT438エラーになる。

発生条件

  • DOCTYPEなしの互換表示モード(Quirksモード)
  • var 宣言なし
  • 関数内でのみ再現
  • HTMLのid名と変数名が同じ

なぜか、id="hoge" と hoge変数の名前がかぶるとエラーになる。

対処方法

  • DOCTYPEちゃんとする
  • var 宣言ちゃんとする

まぁ、要はちゃんと書いていれば問題が起こらないようなケースなんだけど、古(いにしえ)すぎるWebサイトの場合、なんかよくありがちなケースに思える…。