这里讲的history包括两个,一个是宿主对象history,一个是HTML5的history API。
宿主对象history
history包括三个方法和一个属性:
属性/方法 | 描述 |
---|---|
length | 返回浏览器历史列表中的 URL 数量。 |
back() | 加载 history 列表中的前一个 URL。 |
forward() | 加载 history 列表中的下一个 URL。 |
go(int N) | 加载 history 列表中的某个具体页面,参数为整数,正数相当于forward N次,负数相当于back N次。 |
其中,当没有前一个url时,back方法不起作用,但也不会报错。forward同理。go函数当参数超出实际可跳转的范围时也不会起作用
HTML5 API
HTML5中增加了两个API和一个事件。
属性/方法 | 描述 |
---|---|
pushState(data, title[,url]) | 向历史记录堆栈的顶部增加一条记录 |
replaceState(data, title[,url]) | 修改当前的历史记录值 |
其中,参数的格式及意义如下:
data: json格式,表示状态(state)的对象
title:string, 标题,目前主流浏览器都不会处理这个标题,这里传null就可以。
url:string,url。(用于替换当前url)
url:string,url。(用于替换当前url)
popState事件
history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面刷新的时候(由于使用pushState修改了history)会触发popstate事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state。通过event.state也可以获取history.state。
window.addEventListener('popstate', function(e) {
if (e.state) {
// ...
}else{
// 页面初始化的时候state为null,需要做的处理
}
// 当然也可以直接使用history.state来获取当前对应的state数据。
});
注:
有些浏览器在页面初始化时不会触发popstate事件。
有的浏览器在页面初始化时会触发popstate事件(如safiri),此时的e.state(或者说是history.state)为null,(但是刷新后点击前进回退操作仍会有之前的历史记录)