为什么运行在XP和Win7虚拟机上的IE8会在使用javascript路由浏览同一网站时删除历史记录



我将sammy.js与我的asp.net mvc web应用程序一起用于客户端路由,以提供单页用户体验。我创建了一个演示应用程序,它在IE9+和其他现代浏览器中运行良好。然而,在XP和Win7上运行IE8时,我遇到了一个奇怪的问题。在浏览这个演示网站时,IE8会记住最初浏览的前后导航,然后它完全忘记了浏览历史记录或我为访问当前页面。因此,后退按钮被禁用,因为没有链接浏览历史记录。这在其他浏览器中是不会发生的,他们记得我正在浏览的页面。

这是我编写的脚本的链接,我在其中定义了sammy.js路由。

我的应用程序的结构是这样的-用户:

  • 来到http://www.abc.com/
  • 显示了按照#/路由的登录页面
  • 如果经过身份验证,将显示主页,这是ajax后期操作的结果
  • 主页有很多选项可以转到详细信息页面,这是ajax post操作的结果

现在,IE8只记得其中的一些步骤,但会自己删除浏览会话中的历史记录项目。我已经尝试使用IE的脚本调试器,但没有显示任何错误。

在每一条路线上,我也尝试过使用alert(history.length);,它会给出不同的随机数,这不是我每次访问新页面时所期望的+1。然后我在微软的网站上找到了这些支持信息。在这种情况下,禁用自动故障恢复功能没有帮助。

我不知道这个奇怪问题背后的原因。这些代码适用于其他浏览器。我也尝试过在XP和Win7上重置IE8。

如果有人能告诉我我错过了什么或做错了什么,那将非常有帮助。

干杯

我确实尝试了很多方法来确定上述问题的任何可能原因。甚至重写了我所有的javascript导航代码并检查了服务器端代码。

但我得到解决方案的唯一地方是:enhanceie,它指出IE8中有一个错误,读起来像:

IE0012:IE Travellog在使用一个大的POST表单如果有一个表单输入字段的值更长超过523659个字符,当您离开页面时,IE可能清除当前会话的travelog(类似于历史记录),禁用后退和前进按钮。IE6&IE7.

您可以选择以下解决方案:

  • 检查上面提到的有很多字符的输入字段并解决您的问题
  • 如果您可以控制将使用IE8的系统,则可以在该计算机上添加以下注册表项。没有现有的密钥,所以,你需要添加一个新的密钥:

    [HKEYCURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TravelLog]"MaxSize"=dword:fffffffff

我发现这些信息真的很放松,因为我花了很长时间来解决这个问题。希望这能帮助到别人。

最新更新