history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。因为history是window对象的属性,因此每个浏览器窗口、每个标签页乃至每个框架,都有自己的history对象与特定的window对象关联。出于安全的考虑,开发人员无法得知用户浏览过的URL。不过,借由用户访问过的页面列表,同样可以在不知道实际URL的情况下实现后退和前进。

使用go()方法可以在用户的历史记录中任意跳转,可以向后也可以向前。这个方法接受一个参数:表示向后或向前跳转的页面数的一个整数值负数表示向后跳转(类似于单击“后退”按钮),正数表示向前跳转(类似于点击“前进”按钮)。

1
2
3
4
5
6
7
8
9
10
//##skipEval

//后退一页
history.go(-1);

//前进一页
history.go(1);

//前进两页
history.go(2);

也可给go()方法传递一个字符串参数,此时浏览器会跳转到历史记录中包含该字符串的第一个位置————可能后退,也可能前进,具体要看哪个位置最近。如果历史记录中不包含该字符串,那么这个方法什么也不做。例如:

1
2
3
4
5
6
7
//##skipEval

//跳转到最近的wrox.com页面
history.go('wrox.com')

//跳转到最近的nczonline.net页面
history.go('nczonline.net');

另外还可以使用两个简写方法back()(后退)和forward()(前进)来代替go():

1
2
3
4
5
6
7
//##skipEval

//后退一页
history.back();

//前进一页
history.forward();

history还有一个length属性,保存着历史记录的数量。这个数量包括所有历史记录,即所有向后和向前的记录。对于加载到窗口、标签页或框架中的第一个页面而言,history.length等于0.通过像下面这样测试该属性的值,可以确定用户是否一开始就打开了你的页面。

1
2
3
4
if(history.length == 0) {
	//这应该是用户打开窗口后的的第一个页面
	console.log('Hey, you got there directly!');
}

当页面的URL改变时,就会生成一条历史记录。在IE8及更高版本、Opera、Firefox、Safari3及更高版本和Chrome中,这里所说的改变包括URL中hash的变化(因此,设置location.hash会在这些浏览器中生成一条新的历史记录)。

【本文内容摘自:《JavaScript高级程序设计》(第3版)Nicholas C.Zakas 著 李松峰 曹力 译】