bom 的 history 对象提供 back()、forward()、go() 实现导航,pushstate() 和 replacestate() 管理状态,popstate 事件监听用户导航变化。

JavaScript 中的 BOM(Browser Object Model)提供了 history 对象,用于操作浏览器会话历史记录。它不直接暴露历史条目内容,但支持后退、前进、跳转到指定位置,以及添加/替换当前历史状态。
用 back() 和 forward() 实现简单导航
这两个方法模拟用户点击浏览器“后退”或“前进”按钮的行为:
-
window.history.back():跳转到上一个历史记录项(等价于go(-1)) -
window.history.forward():跳转到下一个历史记录项(等价于go(1)) - 调用时若目标不存在(比如已在历史栈底),则无效果,也不会报错
用 go(n) 精确跳转到相对位置
go() 接收一个整数参数,表示在历史记录中移动的步数:
-
go(-2):后退两步 -
go(0):刷新当前页面(重新加载当前 URL,不触发新历史记录) -
go(3):前进三步(前提是后续有足够多的可前进记录)
用 pushState() 和 replaceState() 管理历史状态
现代单页应用(SPA)依赖这两个方法实现无刷新路由变化,并保留可导航的历史记录:
-
pushState(state, title, url):向历史栈新增一条记录,不触发页面跳转,仅更新地址栏(url必须同源) -
replaceState(state, title, url):替换当前历史记录项,不会新增条目,适合更新 URL 但不想让用户多按一次后退 -
state是任意可序列化的对象,会在popstate事件中传回 -
title参数目前多数浏览器忽略,建议传空字符串''
监听历史变化:popstate 事件
当用户点击后退/前进按钮,或代码调用 back()/forward()/go() 时,会触发 popstate 事件:
- 需通过
window.addEventListener('popstate', handler)注册监听 - 回调函数接收的
event.state即为对应历史项的state对象 -
pushState()和replaceState()不会触发该事件;只有用户行为或go()类导航才会触发
不复杂但容易忽略:每次调用 pushState 或 replaceState 后,history.length 会相应变化;而 back()/forward() 是否有效,取决于当前在历史栈中的位置和栈长度。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











