onbeforeunload JavaScript イベントで行われる要求が原因で、Internet Explorer 7、8、および 9 がフリーズするという問題に遭遇しました。これは多くのことが進行中の複雑なサイトですが、問題を小さなテストに切り分けることができました。IE7 で再現する正確な手順:
- Internet Explorer 7 を開く
- テスト中は常に 1 つのタブを開いたままにしておきます (同じセッションを維持するため)。
- 新しいタブを開き、http://www.brillbrothers.com/LockIE/test2/にアクセスします。
- タブを閉じる
- リクエストがハングし始めるまで、手順 3 と 4 を繰り返します (通常、私の場合は 2 回かかります)。それらがハングすると、私が実行しているWebプロキシ/ネットワークモニターによると、リクエストはIEによって行われなくなります。
結果は少し異なりますが、IE8 で再現する手順はほぼ同じです。通常、最初の 2 回は機能し、その後しばらく断続的に機能し、その後リクエストが毎回ハングアップし始めます。
IE9 でも手順は同じですが、問題の再現にはさらに時間がかかります。
IE10では再現できません。
また、一部のレジストリ値を調整すると問題が改善されることもわかりました。ドメインあたりの最大接続数を高くすると (kb # 282402)、問題の再現に時間がかかります。この場合、これは内部ツールに使用されるため、ブラウザーを完全に制御できます。したがって、別の問題が発生しない限り、レジストリの変更などは問題ありません。
上記の手順を自動的に実行するスクリプトもセットアップしました。基本的に、テスト URL への新しいウィンドウを開き、数秒待ってからウィンドウを閉じます。ここで実行して、問題をすばやく確認できます (ページが新しいウィンドウを開くことを許可する必要があります): http://brillbrothers.com/LockIE/test2/runTest.html
クレイジーなことは、ほとんどすべてが結果に影響を与えるように見えることです。AJAX 呼び出しで別の Cookie を設定したり、AJAX 呼び出しの内容を変更したりすると、動作が異なる可能性があります。完全にクレイジー。誰かがこれに対する解決策を持っていれば、私は真剣に感銘を受けます。:)