JavaScript 通过 history API 实现 SPA 的无刷新导航:pushState/replaceState 修改历史记录并更新 URL,popstate 事件响应前进后退,需服务端 fallback 支持直接访问路由。
JavaScript 通过 history API 操作浏览器历史,让单页应用(SPA)在不刷新页面的前提下切换视图、保存状态、响应前进后退——这是 SPA 实现“类多页体验”的核心机制。
这两个方法允许你向浏览器历史栈中添加新记录或替换当前记录,同时不触发页面跳转:
pushState(state, title, url):新增一条历史记录(用户点击后退会回到上一状态)replaceState(state, title, url):替换当前历史记录(不增加新条目,适合表单提交后修正 URL)state 是任意可序列化的对象,会被存入历史记录,后续通过 popstate 事件读取url 必须与当前域名同源,否则报错;它会更新地址栏,但不会发起请求当用户点击浏览器前进/后退按钮,或调用 history.back() 等方法时,会触发 popstate 事件:
state 属性就是之前传入 pushState 或 replaceState 的状态对象history.state 主动恢复传统多页应用靠服务端返回完整 HTML,URL 变化天然对应新页面;而 SPA 所有内容由 JS 动态渲染,URL 改变若不被监听和响应,就会导致:
为支持直接访问 /user/123 这类前端路由,需确保服务端对所有非静
态资源路径都返回 SPA 入口 HTML(如 index.html),再由前端路由接管解析:
historyApiFallback: true
try_files $uri $uri/ /index.html;