IE8では新機能の実装を含めて、いくつかの点で機能変更が加えられている。これはIE7との互換性を重視したCompatibility Viewとて例外ではなく、新機能の追加やいくつかの仕様変更が理由で100%の互換性を提供できない。下記はMicrosoftのIEチームがユーザーからのフィードバックを基に、大きく問題となるポイントをまとめたものだ。
Cross Document Communication
「セキュリティ上の理由からクロスドメイン/クロスドキュメント通信が無効になった」。
解決方法: Cross Document Messaging (XDM)を利用する
Event Object Properties
「XDMなど特定のAjax機能実装においてIE8に新プロパティが追加されており、これが原因でIE8のCompatibility Viewにおいて特定のイベントオブジェクトでプロパティ名の競合を起こす(sourceプロパティなど)」。
event.source = myObject; // Read-only in IE8
解決方法: 競合を起こすカスタムプロパティの名称を変更する(source→mySourceなど)。
event.mySource = myObject;
Attribute Ordering
「アトリビュートの優先順位が変更されており、コレクションや内/外HTMLの値で影響を受ける。もしアトリビュートの順番に依存したページがあった場合正常に表示されない」。
attr = elm.attributes[1]; // May differ in IE8
解決方法: コレクション内のアトリビュートを名前で明示する。
attr = elm.attributes["id"];
Unsupported CSS Values
「IEのバージョンによってCSSの値のサポートの有無が存在するが、これを利用してバージョン判別を行っている場合」。
try {
elm.style.display = "table-cell";
} catch(e) {
// This executes in IE7,
// but not IE8, regardless of mode
}
解決方法: CSSによるバージョン判別を止める。難しい課題であり、もしページの動作がこれに依存する場合、IE8 Standards Modeで動作するよう変更するのが最良の解決手段かもしれない。