Windows Internet Explorer 9 |
JavaScriptプログラミングでフラストレーションが溜まるポイントのひとつに、IEとそれ以外のブラウザで記述方法が異なることを挙げることができる。特にDOM周りのコーディングはIEだけ別の記述をしなければならない。しかし、これもIE8までの話ということになりそうだ。現在開発が進められているIE9ではこうした問題が解決している。どういった変更を実施したかがIEBlogのExploring IE9's Enhanced DOM Capabilitiesに詳しく説明されている。
これまでIEだけはDOM周りの実装がほかのブラウザと違っていた。これはDOMへのアクセスにCOMを使っていたことに原因がある。結果として、プログラマがすべてのブジェクトに期待する機能がIEの提供するDOMオブジェクトにだけは存在せず、別の方法を使って実現する必要があった。それにプログラミング的にも奇妙に思える挙動がいくつもあった。たとえばIE8以前では、DOMオブジェクトの関数はtypeofで関数としてではなくオブジェクトと判断される。
IE9ではほかのブラウザとの互換性の向上、WebIDLサポート、ECMAScript 5サポートなどが実施され、基本的にはほかのブラウザと同じコードが動作するようになる。IE8以前のIEとIE9におけるDOMまわりの振る舞いの主な違いは次のとおり。
- IE8以前はDOMオブジェクトはホストオブジェクトとして扱われていた。ホストオブジェクトはオブジェクトに要求される基本的な機能を実装しなくてもよいという例外的な扱いになるため、IEのDOMオブジェクトには期待される機能がそろっていなかった。IE9ではDOMオブジェクトはネイティブオブジェクトとして実装されている。ほかのJavaScriptオブジェクトと同じように扱える。
- IE8では関数を列挙できなかったが、IE9からは列挙できるようになっている。enumerableをtrueに設定したDOMオブジェクトのプロパティも列挙可能。
- IE8までは暗黙的なDOMオブジェクトの関数呼び出しが可能だったが、IE9からはこれが禁止されており、正規の記述をしなければ実行されないようになっている。
- userPropertyの扱いを変更。IE8以前はuserPropertyの扱いがほかのブラウザと違っていたが、これが他のブラウザと同じ挙動になる。
IE9からはDOMプログラミングモデルがほかのブラウザと同じになるため、基本的にほかのブラウザで動作するコードがIE9でも動作するようになる。これはWebデベロッパとしてはだいぶ助かる事実だ。当然、IE9が登場してからもIE6、IE7、IE8はシェアを保ち続けるだろうから、向こう数年はこれらレガシーブラウザを考慮したプログラミングを実施しなければならない。しかしながら、これが未来永劫続くことがなく、いずれはIEだけ切り分けるというJavaScriptコーディングから開放されることになる道しるべがみえてきたことは興味深い。