window.postMessage メソッドにより発生した message イベントを document.createEventObject の引数に渡すと一部の Internet Explorer 8 がクラッシュする件
あまり Internet Explorer を使っていなかったので知らなかったのですが、Internet Explorer 8 を使っていると、以下のようなメッセージが表示されて強制的に web ページを閉じられることがしばしばあるようですね。
お使いのコンピューターを保護するため Internet Explorer はこの Web ページを閉じました。
正しく機能しないアドオンまたは悪意のあるアドオンが存在するため、Internet Explorer はこの Web ページを閉じました。
- 詳細情報
- Windows データ実行防止機能によって、システム メモリを不正に使用しようとしたアドオンが検出されました。正しく機能しないアドオンや悪意のあるアドオンである可能性があります。
Web 上で調べてみると、「『システムメモリを不正に使用しようとしたアドオンが検出された』 と書かれているけど、有効なアドオンは 1 つも無いし、何が原因なのかわからない」 というような話がいくつかありました。 私の手元の Windows 7 + Internet Explorer 8 でもこの問題が発生したので、原因を調べてみました。
原因
メッセージには 「アドオン」 と書かれていますが、原因としては web ページ上の JavaScript にあることもあるようです。 私が調べたところ、以下のことを行うことでこの問題が発生するということがわかりました。
- window.postMessage メソッド を使って、別の window にメッセージを送る (別の window で Event が発生する)
- 送られた側の window が Event を受け取り、その Event を document.createEventObject メソッド に引数として渡す
IE が停止するときには、『Internet Explorer は動作を停止しました』 というメッセージウィンドウが表示され、詳細情報としては以下のものが表示されました。
問題の署名: 問題イベント名: BEX アプリケーション名: iexplore.exe アプリケーションのバージョン: 8.0.7600.16385 アプリケーションのタイムスタンプ: 4a5bc69e 障害モジュールの名前: StackHash_0a9e 障害モジュールのバージョン: 0.0.0.0 障害モジュールのタイムスタンプ: 00000000 例外オフセット: ff7fce00 例外コード: c0000005 例外データ: 00000008 OS バージョン: 6.1.7600.2.0.0.768.3 ロケール ID: 1041 追加情報 1: 0a9e 追加情報 2: 0a9e372d3b4ad19135b953a78882e789 追加情報 3: 0a9e 追加情報 4: 0a9e372d3b4ad19135b953a78882e789 オンラインのプライバシーに関する声明をお読みください: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0411 オンラインのプライバシーに関する声明が利用できない場合は、プライバシーに関する声明をオフラインでお読みください: C:\Windows\system32\ja-JP\erofflps.txt
IE のバージョンとしては、8.0.7600.16385 において確認できました (64-bit 版の IE でも 32-bit 版の IE でも)。 また、バージョン 8.0.7601.17514 では発生しませんでした。
サンプル
この問題が発生するようなサンプルを用意しました。 問題発生の確認に使用できると思いますのでおいておきます。 IE 8 でのみ動作を確認しています。