所以,我遇到了一个奇怪的问题,我希望有一些IE浏览器可以帮助我们了解这种行为。我的公司运行实时升降机应用程序。我们使用彗星模型实现浏览器和服务器之间的实时通信,就像Lift的标准一样。另外值得注意的是:如果彗星与服务器不同步(无论是因为连接问题还是服务器重启,任何可能导致服务器终止会话的事件),服务器都会通过document.location.reload();
响应该彗星请求来重新加载页面,启动一个新的会话,等等。IE收到302后继续执行JS?
现在,为了确保注销按他们应该的方式发生,我们有一个特殊的url(/ session/logout),它会执行所有与会话有关的清理操作,然后将您带回到我们的主页。这可以通过点击该URL的锚点来触发,或者如果您尝试执行某些要求您注销的内容,则服务器可能会向您发送该URL的302。很简单,对吗?
- 用户无论点击退出按钮或服务器发送一个302 /会话/注销 当前页面上
- 的Javascript运行停止,所以:在大多数浏览器,因为工作流程看起来像这样这样的伟大工程所有的彗星都关闭了。
- 浏览器加载/会话/注销
- 浏览器从服务器收到302消息(表示会话清理已完成)以将用户踢到主页。
- 浏览器加载主页。
然而,在IE中我们看到以下行为:
- 用户无论点击退出按钮或服务器发送一个302 /会话/注销
- 浏览器开始加载/会话/注销
- 浏览器从服务器收到302消息(表示会话清理已完成)以将用户踢到主页。
- 浏览器开始加载主页。
- 彗星从服务器接收
document.location.reload();
,因为他们从来没有关闭通过IE浏览器,网页的加载被中止,而当前页面没有登录的用户重新加载。
这是完全不可取的,因为我们需要/ session/logout加载的正确结果 - ,尤其是,在用户尝试做某些他们登录时无法做到的事情的情况下(在这种情况下,从注销返回的302会指向到他们最初尝试去的任何地方)。
有没有人遇到过这种问题?有关如何处理此问题的任何建议?
什么版本的IE?标准模式与否? – joshp
IE 8和IE 9都运行在标准模式下,表现出这种行为。 –