JavaScript通过History API实现无刷新导航,核心是pushState()添加历史记录、replaceState()替换当前记录、popstate事件监听用户前进/后退,配合URL解析与动态加载可构建SPA,服务端需返回统一入口页。
JavaScript 通过 History API 实现无刷新导航,核心是 pushState()、replaceState() 和 popstate 事件,不触发页面重载即可更新 URL 并管理历史栈。
pushState() 在历史栈中新增一条记录,同时改变地址栏 URL(可跨路径),但不刷新页面。它接受三个参数:
event.state 获取;示例:
history.pushState({ page: 'article', id: 123 }, '', '/article/123');当只想更新 URL 或 state 而不新增历史项时(比如表单提交后修正 URL),用 replaceState()。它行为类似 pushState(),但不增加新条目,而是覆盖当前历史状态。
示例:
history.replaceState({ page: 'search', q: 'js' }, '', '/search?q=js');用户点击返回/前进按钮时,会触发 popstate 事件,事件对象的 state 属性即为对应历史记录中保存的数据。
需提前绑定监听:
window.addEventListener('popstate', (event) => {注意:popstate 不会在 pushState 或 replaceState 调用时触发,只响应用户导航行
为(含 JS 调用 history.back() 等)。
实际开发中,常结合 URL 解析与动态内容加载:
event.preventDefault() 阻止默认跳转;pushState() 更新 URL,再手动渲染新内容;popstate 处理逻辑与 push 时一致,保持体验连贯。关键点:服务端需配置为对所有前端路由返回同一 HTML 入口(如 index.html),避免 404。