Js之Navigator对象
js正则表达式判断数字Window对象的navigator属性引⽤的是包含浏览器⼚商和版本信息的Navigator对象。Navigator对象的命名是为了纪念Netscape之后NavigatorBU览器译注2,不过所有其他的浏览器也⽀持它(IE还⽀持clientln formation属性,它作为navigator的⼚商中⽴同义
词。遗憾的是,其他浏览器并不⽀持这⼀更直观的属性命名)。过去,Navigator对象通常被脚本⽤来确定它们是在IE中还是在Netscape中运⾏。这种浏览器嗅探⽅法有问题,因为它要求随着新浏览器和现有浏览器的新版本的引⼊⽽不断地
调整。如今,有⼀种更好的功能测试⽅法(参见13.4.3节),只需要测试所需要的功能(即,⽅法或属性),⽽不是偎设特定的浏览器版本及其功能。然⽽,浏览器嗅探有时候仍然有价值。这样的⼀种情况是,当需要解决存在于某个特定
的浏览器的特定版本中的特殊的bug时。Navigator对象有4个属性⽤于提供关于运⾏中的浏览器的版本信息,并且可以使⽤这些属性进⾏浏览器嗅探。
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=LowerCase();
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
[];
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论