HTML5无刷新修改URL:利用 History API 无刷新更改地址栏
pushState 方法
上面的语句实际上用到了 HTML5 的历史记录 API。这套 API 提供一种「人为操纵」浏览器历史记录的方法。
浏览器历史记录可以看作一个「栈」。栈是一种后进先出的结构,可以把它想象成一摞盘子,用户每点开一个新网页,都会在上面加一个新盘子,叫「入栈」。用户每次点击「后退」按钮都会取走最上面的那个盘子,叫做「出栈」。而每次浏览器显示的自然是最顶端的盘子的内容。
执行pushState函数之后,会往浏览器的历史记录中添加一条新记录,同时改变地址栏的地址内容。它可以接收三个参数,按顺序分别为:
一个对象或者字符串,用于描述新记录的一些特性。这个参数会被一并添加到历史记录中,以供以后使用。这个参数是开发者根据自己的需要自由给出的。
一个字符串,代表新页面的标题。当前基本上所有浏览器都会忽略这个参数。
一个字符串,代表新页面的相对地址。
var state = {
id: 2,
name: "profile"
};
window.history.pushState(state, "My Profile", "/profile/");
popstate 事件
当用户点击浏览器的「前进」、「后退」按钮时,就会触发popstate事件。你可以监听这一事件,从而作出反应。
window.addEventListener("popstate", function(e) {
var state = e.state; // do something...
});
这里e.state就是当初pushState时传入的第一个参数。例如,在我们的例子中,有:
e.state.id == 2;
e.state.name == "profile";
replaceState 方法
有时,你希望不添加一个新记录,而是替换当前的记录(比如对网站的 landing page),则可以使用replaceState方法。这个方法和pushState的参数完全一样。
//window.history.pushState(null,null,"/chinapost/activitys/queensDayAction!index.do?activity_code=0803&thd_sys_id=12");