HTML5 History API单页路由核心是拦截导航、更新URL、响应历史变化;通过pushState修改地址栏、popstate监听前进后退、初始读取pathname匹配路径、服务端配置404回退至index.html。
用 HTML5 History API 构建无刷新单页应用路由系统,核心是三件事:拦截导航、更新 URL、响应历史变化。它不依赖框架,纯原生 JS 就能跑起来,关键是把 pushState、popstate 和 URL 解析串成闭环。
用户点链接时,阻止默认跳转,改用 JavaScript 控制:
a[data-router])e.preventDefault() 阻止页面刷新/about),执行 history.pushState({ path: '/about' }, '', '/about')
用户点后退或前进按钮时,URL 变了但页面不会自动反应,必须手动接管:
window.addEventListener('popstate', handler)
event.state?.path;若为空(比如直接访问或刷新),就 fallback 到 location.pathname
页面首次打开或刷新时,history.state 是 null,不能只靠 popstate:
立即学习“前端免费学习笔记(深入)”;
location.pathname,调用一次渲染逻辑router.match(path) 函数,把路径映射到组件/模板/数据加载逻辑/user/123 可提取 id = 123,用于后续 fetchHistory 模式用的是真实路径(如 /dashboard),不是哈希(#dashboard)。这意味着用户直接输入或分享该 URL 时,服务器必须返回你的主 HTML 文件(通常是 index.html):
try_files $uri $uri/ /index.html;
_redirects 或 vercel.json 中设置 404 重定向到 /
不复杂但容易忽略——只要这四步串通,你就有了一个轻量、可控、SEO 友好的前端路由基础。