Js之Navigator对象

Window对象的navigator属性引用的是包含浏览器厂商和版本信息的Navigator对象。Navigator对象的命名是为了记念Netscape以后NavigatorBU览器译注2,不过全部其余的浏览器也支持它(IE还支持clientln formation属性,它做为navigator的厂商中立同义
词。遗憾的是,其余浏览器并不支持这一更直观的属性命名)。过去,Navigator对象一般被脚本用来肯定它们是在IE中仍是在Netscape中运行。这种浏览器嗅探方法有问题,由于它要求随着新浏览器和现有浏览器的新版本的引入而不断地
调整。现在,有一种更好的功能测试方法(参见13.4.3节),只须要测试所须要的功能(即,方法或属性),而不是偎设特定的浏览器版本及其功能。然而,浏览器嗅探有时候仍然有价值。这样的一种状况是,当须要解决存在于某个特定
的浏览器的特定版本中的特殊的bug时。Navigator对象有4个属性用于提供关于运行中的浏览器的版本信息,而且可使用这些属性进行浏览器嗅探。web

appName
Web浏览器的全称。在IE中,这就是“Microsoft Internet Explorer”。在Firefox中,该属性就是“Netscape”。为了兼容现存的浏览器嗅探代码,其余浏览器一般也取值为“Netscape”。
appVersion
此属性一般以数字开始,并跟着包含浏览器厂商和版本信息的详细字符串。字符串前面的数字一般是4.0或5.0,表示它是第4或第5代兼容的浏览器。appVersion字符串没有标准的格式,因此,没有办法直接用它来判断浏览器的类型。
userAgent
浏览器.在它的USER-AGENT HTTP头部中发送的字符串。这个属性一般包含appVersion中的全部信息,而且经常也可能包含其余的细节。和appVersion-样,它也没有标准的格式。因为这个属性包含绝大部分信息,所以浏览器嗅探代码一般用它来嗅探。
platform
在其上运行浏览器的操做系统(而且多是硬件)的字符串。Navigator属性的复杂性正说明了浏览器嗅探对于处理客户端兼容性问题是没有太大帮助的。在Web的早期,人们写了大量的浏览器特定代码用于测试相似于navigator.appName
的属性。在开发新浏览器的时候,浏览器厂商发现为了让现有网站显示正确,它们须要把appName设置为“Netscape”。相似的作法使得appVersion的起始数字失去了意义,而如今的浏览器嗅探代码必需要依赖于比以前复杂不少的navigator.userAgent字符串。
例14-3展现了如何用正则表达式(摘自iQuery)从navigator.userAgent中抽取浏览器名称和版本号的方法。正则表达式

例14-3:使用navigator.userAgent~-进行浏览器嗅探
//为客户端嗅探定义browser.name和browser.version,这里使用了jOuery l.4.1中的代码
//name和number都是字符串,对于不一样的浏览器输出的结果也是不同的,检测结果以下:
J|
//”webkit":Safari或Chrome;版本号是Webkit的版本号
//”opera": Opera;版本号就是软件的版本号
//“mozilla":Firefox或者其余基于gecko内核的浏览器;版本号是Gecko的版本
//”msie":IE;版本号就是软件的版本
||
//好比Firefox 3.6返回:{name: "mozilla", version: "1.9.2"}
var browser=(function(){
var s=navigator.userAgent.toLowerCase();
var match=/(webkit)[\/]([\w.]+)/.exec(s) ||
/(opera)(?: .*version)?[\/]([\w.]+)/.exec(s) ||
/(msie)([\w.]+)/.exec(s) ||
/compatible/.test(s)&&/(mozilla)(?:.*rv:([\w.]+))?/.exec(s)I l
[];
相关文章
相关标签/搜索