使用后退按钮返回时,修改后的网页的哪些部分会被保留?

时间:2017-05-18 08:29:11

标签: javascript html standards

我有一个页面foo.html,其中包含输入字段和动态内容。离开此页面并使用浏览器的后退按钮返回后,我发现各种浏览器的行为不一致:

  • 有些人返回初始版本的foo.html(没有用户输入,没有动态内容)。
  • 有些人会返回foo.html的最终版本(用户输入和动态内容)。
  • 有些人会返回新版本的foo.html(保留用户输入但不保留动态内容)。

浏览器应该如何做出某些指定的默认行为,还是这种“实现定义的行为”?

其他细节:这是我用于测试的最小例子:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<input type="text" id="mytext" />
<span id="myspan"></span>

<a href="http://www.stackoverflow.com">Leave</a>

<script type="text/javascript">
    $(function () {
        $("#mytext").on("input", function () { $("#myspan").text(this.value); });
    });
</script>

在文本框中输入的文本(“用户输入”)将镜像到范围(“动态内容”)中。我已使用不同的浏览器对其进行了测试,结果如下:

  • Chrome 58,Edge 40,IE 11(通过http网址访问):保留用户输入,不保留动态内容。
  • Firefox 53,Opera Mobile Emulator 12.10:保留用户输入和动态内容。
  • IE 11(通过文件URL访问):既不保留用户输入也不保留动态内容。

注意:当页面变得更复杂且AJAX更重时(例如Firefox不保留动态内容或IE不保留用户输入),我看到了不同的,不一致的行为。

1 个答案:

答案 0 :(得分:0)

通常,行为是标准化的(HTML5规范的第5.6.10节"History Traversal")。不幸的是,由浏览器决定哪个状态是持久的。引用规范的第5.5节"Session history and navigation"

  

具有持久用户状态的条目也是具有用户代理定义状态的条目。该规范没有规定可以存储哪种状态。

     

例如,某些用户代理可能希望保留滚动位置或表单控件的值。

因此,根据HTML5规范,您提问中提到的所有示例行为都是有效的。