location对象
location对象是最有用的BOM对象之一,它提供了与当前窗口加载的文档有关的信息,还提供了一些导航功能。location对象既是window对象的属性,也是document对象的属性;换句话说,window.location和document.location引用的是同一个对象。location对象的用处不只表现在它保存着当前文档的信息,还表现在它将URL解析为独立的片段,让我们可以通过不同的属性访问这些片段。下表列出了location对象的所有属性(省略了每个属性前面的location前缀)。
查询字符串参数
虽然可以通过location.search得到从问号到URL末尾的所有内容,但却没办法逐个访问,因此可以像下面这样创建一个函数,用以解析每个字符串,然后返回包含所有参数的一个对象
function getQueryStringArgs() {
// 取得查询字符串并去掉开头的问号
var qs = location.search.length>0? location.search.substring(1):"";
// 保存数据的对象
var args = {};
// 取得每一项
var items = qs.length?qs.split("&"):[];
var item = null;
var name = null;
var value = null;
for (var i = 0; i < items.length; i++) {
item = items[i].split("=");
name = decodeURIComponent(item[0]);
value = decodeURIComponent(items[1]);
if (name.length) {
args[name] = value;
}
}
}
位置操作
- assign():立即打开新URL并在浏览器的历史记录中生成一条记录
- replace():导航到新URL,但不会在历史记录中生成新纪录,即,用户不能返回到前一个页面
- reload():重新加载当前显示的页面
navigator对象
navigator对象包含有关浏览器的信息,是识别客户端浏览器的事实标准。下表列出了存在于所有浏览器中的属性和方法,以及支持它们的浏览器版本。
表中的这些navigator对象的属性通常用于检测显示网页的浏览器类型。
检测插件
在非IE浏览器下检测插件(利用navigator.plugins数组进行检测)
navigator.plugins数组有如下属性:
- name:插件的名字
- description:插件的描述
- filename:插件的文件名
- length:插件所处理的MIME类型数量
一般来说,name属性中会包含检测插件必需的所有信息,但有时候也不完全如此。在检测插件时,需要像下面这样循环迭代每个插件并将插件的name与给定的名字进行比较。
// 不支持IE
function hasPlugin(name) {
name = name.toLowerCase();
var pluginsArray = navigator.plugins;
for (var i = 0, pluginLength = pluginsArray.length; i < pluginLength; i++) {
if (pluginsArray[i].name.toLowerCase().indexOf(name) > -1) {
return true;
}
}
return false;
}
// 检测flash
hasPlugin("Flash");
// 检测QuickTime
hasPlugin("QuickTime")
检测IE中的插件比较麻烦,因为IE不支持Natscape式的插件。在IE中检测插件的唯一方式就是使用专有的ActiveXObject类型,并尝试创建一个特定插件的实例。IES是以COM对象的方式实现插件的,而COM对象使用唯一标识符来标识。因此,要想检查特定的插件,就必须知道其COM标识符。例如,Flash的标识符是ShockwaveFlash.ShockwaveFlash。知道唯一标识符后,就可以编写类似下面的函数来检测IE中是否安装相应的插件了。
// 检测IE中的插件
function hasIEPlugin(name) {
try {
new ActiveXObject(name);
return true;
} catch(e) {
return false;
}
}
鉴于检测这两种插件的方法差别太大,因此典型的做法是针对每个插件分别创建检测函数,而不是使用前面介绍的通用检测方法。
// 检测所有浏览器中的Flash
function hasFlash() {
var resultFlag = hasPlugin("Flash");
if (!resultFlag) {
resultFlag = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
}
return resultFlag;
}
navigator.plugins.refresh():用于刷新最新安装插件plugins的集合
navigator.plugins.refresh(true):更新插件集合,以及重新加载包含插件集合的所有页面。
screen对象
screen对象基本上只用来标明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等。下表列出了所有属性及支持相应属性的浏览器。
属 性 | 说 明 | IE | Firefox | Safari/Chrome | Opera |
---|---|---|---|---|---|
availHeight | 屏幕的像素高度减系统部件高度之后的值(只读) | | | | |
availLeft | 未被系统部件占用的最左侧的像素值(只读) | | | ||
availTop | 未被系统部件占用的最上方的像素值(只读) | | | ||
availWidth | 屏幕的像素宽度减系统部件宽度之后的值(只读) | | | | |
bufferDepth | 读、写用于呈现屏外位图的位数 | | |||
colorDepth | 用于表现颜色的位数;多数系统都是32(只读) | | | | |
deviceXDPI | 屏幕实际的水平DPI(只读) | | |||
deviceYDPI | 屏幕实际的垂直DPI(只读) | | |||
fontSmoothingEnabled | 表示是否启用了字体平滑(只读) | | |||
height | 屏幕的像素高度 | | | | |
left | 当前屏幕距左边的像素距离 | | |||
logicalXDPI | 屏幕逻辑的水平DPI(只读) | | |||
logicalYDPI | 屏幕逻辑的垂直DPI(只读) | | |||
pixelDepth | 屏幕的位深(只读) | | | | |
top | 当前屏幕距上边的像素距离 | | |||
updateInterval | 读、写以毫秒表示的屏幕刷新时间间隔 | | |||
width | 屏幕的像素宽度 | | | | |
hostory对象
history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后退和前进。
使用go()方法可以在用户的历史记录中任意跳转。这个方法接收一个参数,表示向后或向前跳转的页面数的一个整数值。负数表示向后跳转(类似于后退按钮),正数表示向前跳转(类似于前进按钮)
//后退一页
history.go(-1)
//前进一页
history.go(1);
//前进两页
history.go(2);
//刷新当前页面
history.go();
//刷新当前页面
history.go(0);
back()方法用于模仿浏览器的后退按钮,相当于history.go(-1)。
forward()方法用于模仿浏览器的前进按钮,相当于history.go(1)。
history.length属性保存着历史记录的URL数量。初始时,该值为1。如果当前窗口先后访问了三个网址,history.length属性等于3。