history API 总结
yingwinwin
前端开发#
History API具体参考history MDN官网的文档
- 属性
- History.length
只读
- History.scrollRestoration
- History.state
只读
- 方法
- History.go(
number
)- History.back()
- History.forward()
- History.pushState(
state
,title
,url
)- History.replaceState(
state
,title
,url
)- 事件
- onpopstate
history stack
#
- 浏览器是一个栈结构的存贮器
#
注意事项go
参数为数字history.go(1)
相当于history.forward()
,history.go(-1)
相当于history.back()
state
属性可以在除了popstate
事件中拿到state
的值得另一种方式,注意它是只读的pushState
和replaceState
的关系- 相同
- 两者的使用方式基本一直,都是在
history.state
中添加内容 - 第一个参数是
state
,第二个参数是title
,第三个参数url
,第二个参数没有浏览器实现,所以一般写null或者''就可以。
- 两者的使用方式基本一直,都是在
- 区别
pushState
会在浏览器加入一条记录,改变history.length
属性。replaceState
是重写浏览器当前的记录,不会增加history.length
的长度
- 相同
popState
事件,在浏览器返回和前进时会触发,也就是说栈结构有pop
操作的时候才会触发的事件
#
具体应用#
1. 清除往返缓存- 往返缓存(
Back/Forward cache
,下文中简称bfcache
)是浏览器为了在用户页面间执行前进后退操作时拥有更加流畅体验的一种策略。该策略具体表现为,当用户前往新页面时,将当前页面的浏览器DOM状态保存到bfcache
中;当用户点击后退按钮的时候,将页面直接从bfcache
中加载,节省了网络请求的时间。
window.performance.navigation.type 如果没有e.persisted
可以通过该属性判断#
2. performance.navigation.type
该属性返回一个整数值,表示网页的加载来源,可能有以下4种情况
value | describe |
---|---|
0 | 网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATE |
1 | 网页通过“重新加载”按钮或者location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。 |
2 | 网页通过“前进”或“后退”按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。 |
255 | 任何其他来源的加载,相当于常数performance.navigation.TYPE_RESERVED |
performance.navigation.redirectCount
表示网页经过重定向的次数。