読者です 読者をやめる 読者になる 読者になる

ドキュメントモードと IE7 と JScript エンジンの機能がよくわからない(だれかおしえて)

昨日の記事を書いたとき、一応少しはテストしてみるかと思って、実際に手元の IE7 と IE8 で動かしてみたんです。

そしたらなぜか IE7 でもネイティヴ JSON オブジェクトが存在するわけですよ。わけがわからない。これは間違いなく IE8 から実装されたものです。

さらに、勤務先のサービスでは X-UA-Compatible が未だに EmulateIE7 なので、その環境で試したわけですよ。つまり、 IE8 で見ようが、 IE9 で見ようが、「ドキュメントモード」が「IE7 標準」になる状況ですね。

その場合、本物の IE7 と同じになるはずなんですけど、なぜか JSON に加えて、 localStorage/sessionStorage と、 onhashchange と postMessage と XDomainRequest が使えてしまうんです。というか、昨日挙げたもので使えないの querySelector/querySelectorAll だけっていう。

これはあれなんでしょうか、やっぱりレンダリングエンジンは古いのを使っているけど、対応する ActiveX オブジェクトが新しくなってしまってると考えていいのかな。 MSDN か IEBlog だったかによれば、「ドキュメントモード」はレンダリングエンジンだけでなく、 JScript エンジンにも影響を与えるはずなので。

というわけで以下が結果です。どなたかなぜこうなるのかご存じの方がいたら教えていただけると嬉しいです。

X-UA-Compatible:EmulateIE7、Standard DOCTYPE アリ

IE7 on XP SP3 最新 Windows Update 適用済み
JSON
localStorage ×
sessionStorage ×
onhashchange ×
postMessage ×
querySelector ×
querySelectorAll ×
XDomainRequest ×
IE8(ドキュメントモード:IE7 標準) on XP SP3 最新 Windows Update 適用済み
JSON
localStorage
sessionStorage
onhashchange
postMessage
querySelector ×
querySelectorAll ×
XDomainRequest
IE9(ドキュメントモード:IE7 標準) on 7 SP1 最新 Windows Update 適用済み
JSON
localStorage
sessionStorage
onhashchange
postMessage
querySelector ×
querySelectorAll ×
XDomainRequest

※ドキュメントモードがIE7 標準の IE8 と IE9 の結果が同じなことには納得感がある。

X-UA-Compatible:EmulateIE9、Standard DOCTYPE アリ

IE7 on XP SP3 最新 Windows Update 適用済み
JSON
localStorage ×
sessionStorage ×
onhashchange ×
postMessage ×
querySelector ×
querySelectorAll ×
XDomainRequest ×
IE8(ドキュメントモード:IE8 標準) on XP SP3 最新 Windows Update 適用済み
JSON
localStorage
sessionStorage
onhashchange
postMessage
querySelector
querySelectorAll
XDomainRequest
IE9(ドキュメントモード:IE9 標準) on 7 SP1 最新 Windows Update 適用済み
JSON
localStorage
sessionStorage
onhashchange
postMessage
querySelector
querySelectorAll
XDomainRequest