请考虑以下代码段:
console.log( "1st", history.length );
location.hash = location.hash + "some-value";
console.log( "2nd", history.length );
setTimeout( function() {
console.log( "3rd", history.length );
history.back();
console.log( "4th", history.length );
}, 1000 );
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/1kqLofq4/2/
我很好奇为什么更改哈希不是调整历史长度但是使用history.back()需要还原哈希的更改?我已经使用Firefox 46和Chrome 49测试了这种情况.输出总是类似于:
1st 17
2nd 17
3rd 17
4th 17
Run Code Online (Sandbox Code Playgroud)
我已经尝试搜索有关此案例的一些规范或信息,为什么这可能是预期的行为以及如何使用除history.length之外的其他信息来检测历史记录中的更改.但我得到的是使用一些我不感兴趣的花式框架插件的提示.
小智 1
我可能会误解,但规范似乎不支持这种行为。这可能是一个错误。
从第 7.8.1节中的步骤 6 :在WHATWG HTML 规范的文档之间导航。
- Fragments:如果这不是重新加载触发的导航:将URL解析器算法应用于资源的绝对URL和browsingContext的活动文档的地址;如果生成的 URL 记录的所有组件(忽略任何片段组件)都是相同的,并且要使用 来获取资源
GET,并且资源的 URL 记录有一个不为 null 的片段组件(即使它为空),则导航到该片段并中止这些步骤。
从第 7.8.9节导航到片段:
- 在 History 对象的末尾附加一个新条目,表示新资源及其 Document 对象、相关状态和当前历史滚动恢复首选项。其 URL 必须设置为用户代理导航到的地址。标题必须保持未设置。
我没有看到任何关于以某种方式替换历史记录条目的信息,而不是修改它(如果它只是片段更改)。.length和 的行为.back()都应该引用同一组历史记录条目(组合的“联合会话历史记录”),因此它们似乎不应该表现出这样的不一致。从本节的注释中:
window.history.length返回联合会话历史记录中的条目数。
window.history.back()联席会议历史回溯了一步。
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |