【问题标题】:Why Internet Explorer differs from the expected functionality on a back button为什么 Internet Explorer 与后退按钮上的预期功能不同
【发布时间】:2014-01-08 14:16:55
【问题描述】:

在我的 ASP.NET MVC 项目中,我们引入了 Lucine Searching,(虽然在这种情况下这些细节不是必需的,只是提供一些背景知识,因为我相信我的问题与 IE 浏览器和缓存有关)。

在此页面中,用户可以根据关键字过滤搜索。并且用户可以单击以转到列出的项目并使用浏览器返回按钮或具有javascript代码onclick = "location.href = 'Javascript:history.go(-1);'"的手动HTML按钮返回到同一页面。

在 Chrome、Firefox 甚至 Internet Explorer 9 中,用户可以毫无问题地返回他离开的页面。我的意思是它保留用户输入的值。

但是,在 IE 10 和 IE 11 中,当用户单击过滤后的列表项时,它会进入页面,并且当用户第一次单击浏览器后退按钮或 HTML 后退按钮时,我会返回正确的过滤页面。但是,当用户再次单击任何项​​目并执行相同的过程时,我将无法取回过滤后的值。取而代之的是所有结果,即使是文本框也不会有用户输入的关键字。

总是假设后退按钮可以帮助人们返回相同的页面并说明他们离开的位置。我不知道为什么 IE 10 和 11 的行为不同。你们中的任何人都可以帮我弄清楚我在这里缺少什么。

【问题讨论】:

标签: javascript asp.net-mvc internet-explorer browser browser-cache


【解决方案1】:

在特殊情况下(仅页面的 url 无法确定状态 - 因为某些内部页内动态功能),我们需要自己实现历史处理。

设置历史标记 – 每当用户采取改变历史记录的操作时 以您想要保存的方式“屏幕”,您应该存储 一个令牌

  • History.newItem("someLinkTarget", false);
  • 响应历史令牌

只要 URL 以 #someToken 结尾,该令牌就会传递给 History 的 ValueChangeHandleronValueChange 方法

public void onValueChange (ValueChangeEvent<String> event) {
String linkTarget = event.getValue();
if (checkForYourSavedToken(linkTarget)) {
... your code displays your expected results;
} else { … }

这些知识来自GWT 阅读虽然,我没有在其核心进行测试。如果这对您没有帮助,请忽略。 (也请找到w3schools,这表明没有适用于历史对象的公共标准,但所有主要浏览器都支持它。

【讨论】:

    【解决方案2】:

    如果您在页面中使用 ajax,然后离开并返回,则该 ajax 状态将丢失。当您单击前进或后退时,页面不会保留加载后所做的任何更改。

    但这并不完全正确。表单是持久化的,我过去曾使用过这个技巧。

    页面加载和用户执行通过 ajax 加载的搜索。将 ajax 响应保存到隐藏的输入。 当用户离开页面并返回时,页面脚本会检测到隐藏输入中现在有内容并对其进行处理,将之前检索到的结果显示给用户。

    【讨论】:

    • 关于 ajax/javascript 状态 - IE11 可能不再适用 - 请查看我对 stackoverflow.com/questions/21274085/… 的研究。这只是我自己的发现,所以它不是结论性的,但似乎 IE11 正在尝试使用并在后退/前进时保存整个页面状态。
    • 有趣。如果我没有看到你发布的演示,我不会相信你。现在要尝试我自己的测试。
    • 很酷,如果您发现任何其他信息,请告诉我。我希望 MS 能够发布并记录这种行为!
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2011-08-02
    • 2013-05-18
    • 1970-01-01
    • 2019-10-04
    • 2016-03-12
    相关资源
    最近更新 更多