JavaScript 中有几个对象在编程中用处不大,而screen 对象就是其中之一。screen 对象基本上只
用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等。每个浏览器
中的screen 对象都包含着各不相同的属性,下表列出了所有属性及支持相应属性的浏览器。
这些信息经常集中出现在测定客户端能力的站点跟踪工具中,但通常不会用于影响功能。不过,有
时候也可能会用到其中的信息来调整浏览器窗口大小,使其占据屏幕的可用空间,例如:
window.resizeTo(screen.availWidth, screen.availHeight);
前面曾经提到过,许多浏览器都会禁用调整浏览器窗口大小的能力,因此上面这行代码不一定在所
有环境下都有效。
涉及移动设备的屏幕大小时,情况有点不一样。运行iOS 的设备始终会像是把设备竖着拿在手里一
样,因此返回的值是768×1024。而Android 设备则会相应调用screen.width 和screen.height 的值。
8.5 history 对象
history 对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。因为history 是window
对象的属性,因此每个浏览器窗口、每个标签页乃至每个框架,都有自己的history 对象与特定的
window 对象关联。出于安全方面的考虑,开发人员无法得知用户浏览过的URL。不过,借由用户访问
过的页面列表,同样可以在不知道实际URL 的情况下实现后退和前进。
使用go()方法可以在用户的历史记录中任意跳转,可以向后也可以向前。这个方法接受一个参数,
表示向后或向前跳转的页面数的一个整数值。负数表示向后跳转(类似于单击浏览器的“后退”按钮),
正数表示向前跳转(类似于单击浏览器的“前进”按钮)。来看下面的例子。
//后退一页
history.go(-1);
//前进一页
history.go(1);
//前进两页
history.go(2);
也可以给go()方法传递一个字符串参数,此时浏览器会跳转到历史记录中包含该字符串的第一个
位置——可能后退,也可能前进,具体要看哪个位置最近。如果历史记录中不包含该字符串,那么这个
方法什么也不做,例如:
//跳转到最近的wrox.com 页面
history.go("wrox.com");
//跳转到最近的nczonline.net 页面
history.go("nczonline.net");
另外,还可以使用两个简写方法back()和forward()来代替go()。顾名思义,这两个方法可以
模仿浏览器的“后退”和“前进”按钮。
//后退一页
history.back();
//前进一页
history.forward();
除了上述几个方法外,history 对象还有一个length 属性,保存着历史记录的数量。这个数量
包括所有历史记录,即所有向后和向前的记录。对于加载到窗口、标签页或框架中的第一个页面而言,
history.length 等于0。通过像下面这样测试该属性的值,可以确定用户是否一开始就打开了你的
页面。
if (history.length == 0){
//这应该是用户打开窗口后的第一个页面
}
虽然history 并不常用,但在创建自定义的“后退”和“前进”按钮,以及检测当前页面是不是
用户历史记录中的第一个页面时,还是必须使用它。
当页面的URL 改变时,就会生成一条历史记录。在IE8 及更高版本、Opera、
Firefox、Safari 3 及更高版本以及Chrome 中,这里所说的改变包括URL 中hash 的变
化(因此,设置location.hash 会在这些浏览器中生成一条新的历史记录)。
8.6
小结
浏览器对象模型(BOM)以window 对象为依托,表示浏览器窗口以及页面可见区域。同时,window
对象还是ECMAScript 中的Global 对象,因而所有全局变量和函数都是它的属性,且所有原生的构造
函数及其他函数也都存在于它的命名空间下。本章讨论了下列BOM 的组成部分。
在使用框架时,每个框架都有自己的window 对象以及所有原生构造函数及其他函数的副本。
每个框架都保存在frames 集合中,可以通过位置或通过名称来访问。
有一些窗口指针,可以用来引用其他框架,包括父框架。
top 对象始终指向最外围的框架,也就是整个浏览器窗口。
parent 对象表示包含当前框架的框架,而self 对象则回指window。
使用location 对象可以通过编程方式来访问浏览器的导航系统。设置相应的属性,可以逐段
或整体性地修改浏览器的URL。
调用replace()方法可以导航到一个新URL,同时该URL 会替换浏览器历史记录中当前显示
的页面。
navigator 对象提供了与浏览器有关的信息。到底提供哪些信息,很大程度上取决于用户的浏
览器;不过,也有一些公共的属性(如userAgent)存在于所有浏览器中。
BOM 中还有两个对象:screen 和history,但它们的功能有限。screen 对象中保存着与客户端
显示器有关的信息,这些信息一般只用于站点分析。history 对象为访问浏览器的历史记录开了一个
小缝隙,开发人员可以据此判断历史记录的数量,也可以在历史记录中向后或向前导航到任意页面。