我在用sammy.js使用我的 asp.net mvc web 应用程序进行客户端路由,以提供单页用户体验。我创建了一个演示应用程序,它在 IE9+ 和其他现代浏览器中运行良好。但是,在 XP 和 Win7 上的 IE8 中运行时,我遇到了一个奇怪的问题。在浏览此演示网站时,IE8 会记住初始浏览的后退和前进导航,然后它会完全忘记浏览历史记录或我到达当前页面所采取的步骤。因此,由于没有链接浏览历史记录,后退按钮被禁用。这在其他浏览器中不会发生,它们会记住我正在浏览的页面。
这是我编写的脚本的链接,其中定义了我的 sammy.js 路由。
我的应用程序的结构如下-用户:
- 来到http://www.abc.com/
#/
根据路线显示登录页面- 如果通过了身份验证,则会显示主页,这是 ajax 发布操作的结果。
- 主页有很多选项可以转到详细信息页面,这是 ajax 发布操作的结果。
现在,IE8 只能记住其中的一些步骤,但会自行删除浏览会话中的历史记录。我尝试使用 IE 的脚本调试器,没有显示任何错误。
在每条路线上,我也尝试过使用alert(history.length);
不同的随机数,而不是我期望的每次访问新页面时都给出 +1。然后我在微软的网站上找到了这个支持信息。在这种情况下,禁用自动崩溃恢复功能没有帮助。
我无法弄清楚这个奇怪问题背后的原因。这些代码在其他浏览器上运行良好。我也尝试在 XP 和 Win7 上重置 IE8。
如果有人能告诉我我遗漏了什么或者做错了什么,那将会非常有帮助。
干杯
答案1
我确实尝试了很多方法来找出上述问题的可能原因。甚至重写了我所有的 javascript 导航代码并检查了服务器端代码。
但我得到解决方案的唯一地方是:增强其中指出 IE8 中有一个错误,如下所示:
IE0012:在包含大型 POST 表单的页面中返回/离开时,IE Travellog 会损坏。如果表单输入字段的值超过 523,659 个字符,则当您离开该页面时,IE 可能会清除当前会话的旅行日志(类似于历史记录),从而禁用后退和前进按钮。在 IE6 和 IE7 中重现。
您可以采用以下解决方案:
- 检查上面提到的包含大量字符的输入字段并解决您的问题。
如果您可以控制将使用 IE8 的系统,则可以在该计算机上添加以下注册表项。没有现有项,因此您需要添加一个新项:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TravelLog] “MaxSize”=dword:ffffffff
我很高兴找到这些信息,因为我花了很长时间来解决这个问题。希望这能对某些人有所帮助。