HTML5 History API 历史记录
History 对象
History 接口 定义了一些操作浏览器的历史会话记录的属性和方法。
Window 对象的 history
属性可以用来获取当前窗口的 History 对象
- 属性
- History.length: 一个整数,表示历史记录中会话的数目
- History.scrollRestoration: 允许 Web 应用程序在历史导航上显式地设置默认滚动恢复行为。此属性可以是自动的(auto)或者手动的(manual)
- 有具体用法补这里
- History.state: 返回一个表示历史堆栈顶部状态的值
- 方法
- History.back(): 返回上一页,等价于
history.go(-1)
- History.forward(): 前往下一页,等价于
history.go(1)
- History.go(num): 通过当前页面的相对位置从浏览器历史记录加载页面(num 可为正数或负数)
- History.pushState(stateObj, title, url): 向历史栈中推入一条记录
- stateObj: 一个对象,通常会存放一些于历史记录相关的数据(当然,你也可以随便放)
- title: 暂时没啥用,直接写为空字符串
- url: 一个字符串,表示新历史纪录的地址(为了安全考虑,新 URL 必须和当前 URL 在同一个域名下)
- History.replaceState(stateObj, title, url): 用指定记录替换历史栈中的当前记录
// 当前页面: http://blog.percymong.com/pages.html
// 执行下面代码
window.history.pushState(null, null, "?page=3");
// 地址栏被改为: http://blog.percymong.com/pages.html?page=3
pushState 与 replaceState 的异同
相同点
函数的参数完全相同
在改动历史栈时都不会使页面刷新
都会更改当前页面的地址栏
都不会出发 popstate 事件
不同点
pushState 会去除当前页面后面的所有历史记录并将指定的新纪录压入历史栈中,并且会将当前页面地址栏的地址改为最新压入历史栈的地址;而 replaceState 仅仅会更改当前页面地址栏的地址为新地址
popstate 事件
- 通常为
window
对象绑定popstate
事件 - 触发
popstate
事件的情况 - 用户手动点击浏览器的前进后退按钮
- 通过 js 调用 history.back()、history.forward()、history.go() 方法触发
history.pushState({
name: 'percy',
age: 22
}, null, '/page1.html')
window.onpopstate = function(e){
console.log(e.state);
};
popstate 事件的事件对象有一个 state 属性,这个属性和 history.state
的值相同。
实际应用
配合 Ajax,无刷新地更改页面地址栏。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论