我遇到了 Internet Explorer 7、8 和 9 由于在 onbeforeunload JavaScript 事件中发出的请求而冻结的问题。这是一个复杂的站点,发生了很多事情,但我已经设法将问题隔离到一个小测试中。在 IE7 中重现的具体步骤:
- 打开 Internet Explorer 7
- 在整个测试过程中保持一个标签打开(以保持相同的会话)
- 打开一个新标签并转到http://www.brillbrothers.com/LockIE/test2/
- 关闭选项卡
- 重复步骤 3 和 4,直到请求开始挂起(我通常需要两次)。一旦它们挂起,根据我正在运行的网络代理/网络监视器,IE 甚至不再发出请求。
在 IE8 中重现的步骤大致相同,尽管结果有些不同。它通常在前两次工作,然后间歇工作一段时间,然后请求每次都开始挂起。
在 IE9 中,步骤仍然相同,但重现问题需要更长的时间。
我无法在 IE10 中重现这一点。
我还发现调整一些注册表值可以使问题变得更好。如果我将每个域的最大连接数更改得更高(kb # 282402),则重现问题需要更长的时间。在这种情况下,我确实可以完全控制浏览器,因为它用于内部工具,所以任何类型的注册表更改等都可以,只要它不会导致任何不同的问题。
我还设置了一个脚本来自动运行上述步骤。它基本上会打开一个指向测试 URL 的新窗口,等待几秒钟,然后关闭窗口。您可以在此处运行它以快速查看问题(您必须允许页面打开新窗口):http ://brillbrothers.com/LockIE/test2/runTest.html
疯狂的是,几乎所有事情似乎都会影响结果。如果我在 AJAX 调用中设置不同的 cookie,更改 AJAX 调用的内容等,它可以使其工作不同。完全疯了。如果有人对此有解决方案,我会印象深刻。:)