即保存onunload bug

时间:2009-03-08 19:10:28

标签: ajax internet-explorer internet-explorer-7 xmlhttprequest

我有一个动态的ajaxy应用程序,当用户关闭资源管理器窗口时,我保存状态。 它适用于所有浏览器,但在IE中存在问题。关闭应用程序选项卡两次后,我无法再连接到服务器。

我的理论是,当关闭选项卡时,与服务器的连接无法完成,并且以某种方式ie7认为它与服务器有2个未完成的连接,因此无限期地排队新连接。

任何人都经历过这种情况,任何变通方法或解决方案?

2 个答案:

答案 0 :(得分:1)

在IE中,如果使用长轮询AJAX请求,则必须在“卸载”时关闭XHR连接。否则,即使您离开您的网站,它也会被浏览器保持活跃状态​​。这些保持活动的连接将导致挂起,因为您的浏览器将达到最大打开连接限制。

其他浏览器不会出现此问题。

答案 1 :(得分:-1)

嗯,你可以轻松地绕过连接限制;只需创建一个通配符域并指示您的应用程序循环子域;例如a.rsrc.dmvnoc.com,b.rsrc.dmvnoc.com等,我的netMail application。如果没有这个技巧,在LAN上预加载所有图像大约需要30秒(因为MSIE的连接限制很低),但是使用它,图像下载大约一秒钟。

如果您需要将脚本与此技巧相结合,只需将document.domain设置为新脚本中的父项。

但是,您可能希望检查更改状态 - 用户可能会丢失其网络连接,或者他们的计算机可能会崩溃。如果你想减少网络流量,让客户端简单地设置一个包含相关状态的cookie - 你可以在那里安装很多(3000字节左右),然后服务器在下一个连接上自动获取它 - 无论如何可以保存结果(就像现在一样)并删除co​​okie以表示它已保存状态。