使用 JavaScript History API 实现无刷新 URL 修改与历史状态管理

作者:小括号

时间:2026-10-29

浏览:622

本文介绍如何使用 HTML5 History API 中的 pushState 方法,在不刷新页面的情况下修改浏览器地址栏 URL 并存储历史状态。通过监听 popstate 事件,开发者可以捕获用户点击后退或前进按钮时的状态变化,从而读取存储的状态对象并执行相应逻辑,实现单页应用中的导航体验优化。

文章目录

History API 实现无刷新 URL 修改

现代浏览器提供了一个实用功能:无需刷新页面即可修改 URL。在浏览过程中,系统会记录浏览历史。当用户点击浏览器后退按钮时,可以从历史记录中获取回退信息。这一功能看似简单,但可以通过代码实现其具体工作机制。


var stateObject = {};
var title = "Wow Title";
var newUrl = "/my/awesome/url";
history.pushState(stateObject,title,newUrl);

History 对象的 pushState() 方法包含三个参数。第一个参数是 JSON 对象,用于存储与当前 URL 相关的任意历史信息;第二个参数是 title(标题),通常传递文档标题;第三个参数是新的 URL 字符串。调用该方法后,浏览器地址栏会显示新 URL,而当前页面不会发生刷新。

以下示例展示了如何在每个独立的 URL 中存储一些任意数据。


for(i=0;i<5;i++){
 var stateObject = {id: i};
 var title = "Wow Title "+i;
 var newUrl = "/my/awesome/url/"+i;
 history.pushState(stateObject,title,newUrl);
}

监听 popstate 事件处理历史状态

运行代码后,点击浏览器的返回按钮,可以观察到 URL 的变化。每次 URL 改变是因为系统存储了历史状态中的 “id” 及其对应值。那么,如何重新获取这些历史状态,并在此基础上执行特定操作呢?我们需要为 “popstate” 事件添加监听器,该事件会在历史对象状态每次发生改变时触发。


for(i=0;i<5;i++){
 var stateObject = {id: i};
 var title = "Wow Title "+i;
 var newUrl = "/my/awesome/url/"+i;
 history.pushState(stateObject,title,newUrl);
 alert(i);
}
 
window.addEventListener('popstate', function(event) {
 readState(event.state);
});
 
function readState(data){
 alert(data.id);
}

此时,无论何时点击返回按钮,都会触发 “popstate” 事件。我们的事件监听器随后会检索与该历史状态对象关联的 URL,并提示 “id” 的值。

整个过程非常简洁且有趣,不是吗?

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章