HTML5 History API 历史记录

发布于 2022-10-18 21:40:15 字数 2296 浏览 172 评论 0

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 仅仅会更改当前页面地址栏的地址为新地址

v2-00b2f4ba9027228170524d716d60ea53_hd

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

滥情哥ㄟ

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文