考虑到历史原因以及现代浏览器中用户代理字符串的使用方式,通过用户代理字符串来检测特定的浏览器并不是一件轻松的事。因此南昌网站设计公司技术人员认为,首先要确定的往往是你需要多么具体的浏览器信息。一般情况 下,知道呈现引擎和最低限度的版本就足以决定正确的操作方法了。例如,我们不推荐使用下列代码:
if (isIE6 if isIE7){//不推荐! //代码
}
这个例子是想要在浏览器为IE6或7时执行相应代码。这种代码其实是很脆弱的,因为它要依据特定的版本来决定做什么。如果是IE8怎么办呢?只要IE有新版本出来,就必须更新这些代码。不过,像下面这样使用相对版本号则可以避免此问题:
if (ieVer>=6){ //代码
)
这个例子首先检测IE的版本号是否至少等于6,如果是则执行相应操作。这样就可以确保相应的代码将来照样能够起作用。我们下面的浏览器检测脚本就将本着这种思路来编写。
如前所述,确切知道浏览器的名字和版本号不如确切知道它使用的是什么呈现引擎。如果Firefox、 Camino和Netscape都使用相同版本的Gecko,那它们一定支持相同的特性。类似地,不管是什么浏览器,只要它跟Safari 3使用的是同一个版本的WebKit,那么该浏览器也就跟Safari 3具备同样的功能。 因此,我们要编写的脚本将主要检测五大呈现引擎:IE.Gecko.WebKit.KHTML和Opera。
为了不在全局作用域中添加多余的变量,我们将使用模块增强模式来封装检测脚本。检测脚本的基本代码结构如下所示:
var client=function(){
//呈现引擎
var engine={
ie: O,
gecko:0,
webkit:0,
khtml:0.
opera:O,
//具体的版本号
ver:null
};
//在此检测呈现引擎、平台和设备
return(
engine : engine
};
}();
这里声明了一个名为client的全局变量,用于保存相关信息。匿名函数内部定义了一个局部变量engine,它是一个包含默认设置的对象字面量。在这个对象字面量中,每个呈现引擎都对应着一个属性,属性的值默认为0。如果检测到了哪个呈现引擎,那么就以浮点数值形式将该引擎的版本号
写入相应的属性。而呈现引擎的完整版本(是一个字符串),则被写入ver属性。作这样的区分可以支持像下面这样编写代码:
if(client.engine.ie){//如果是IE,client.ie的值应该大于0
//针对IE的代码
} else if (client.engine.gecko>1.5)(
if (client.englne.ver=="1.8.1"){
//针对这个版本执行某些操作
}
}
在检测到一个呈现引擎之后,其client.engine中对应的属性将被设置为一个大于0的值,该值可以转换成布尔值true。这样,就可以在if语句中检测相应的属性,以确定当前使用的呈现引擎,连具体的版本号都不必考虑。鉴于每个属性都包含一个浮点数值,因此有可能丢失某些版本信息。例如,将字符串”1.8.1传入parseFloat()后会得到数值1.8。不过,在必要的时候可以检测ver属性,该属性中会保存完整的版本信息。
要正确地识别呈现引擎,关键是检测顺序要正确。由于用户代理字符串存在诸多不一致的地方,如果检测顺序不对,很可能会导致检测结果不正确。为此,第一步就是识别Opera,因为它的用户代理字符串有可能完全模仿其他浏览器。我们不相信Opera,是因为(任何情况下)其用户代理字符串(都)不会将自己标识为Opera。
要识别Opera,必须得检测window.opera对象。Opera 5及更高版本中都有这个对象,用以保存与浏览器相关的标识信息以及与浏览器直接交互。在Opera 7.6及更高版本中,调用version()方法可以返回一个表示浏览器版本的字符串,而这也是确定Opera版本号的最佳方式。要检测更早版本的 Opera,可以直接检查用户代理字符串,因为那些版本还不支持隐瞒身份。不过,2007底Opera的最高版本已经是9.5了,所以不太可能有人还在使用7.6之前的版本。那么,检测呈现引擎代码的第一步,就是编写如下代码:
if (window.opera){
engine.ver=window.opera.version();
engine.opera=parseFloat( engine.ver);
}
这里,将版本的字符串表示保存在了englne.ver中,将浮点数值表示的版本保存在了egine.opera中。如果浏览器是Opera,测试window.opera就会返回true;否则,就要看看是其他的什么浏览器了。
本文仅限内部技术人员学习交流,不得作于其他商业用途.文章出自:南昌网站建设公司-百恒网络 http://www.jxbh.cn 如转载请注明出处!