客户端检测

一、能力检测

能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。能力检测要先检测达成目的的最常用的特性,这样可以保证代码最优化。并且,能力检测必须检测实际要用到的特性,因为一个特性不存在,并不代表另一个特性不存在。

目前,在浏览器环境下测试任何对象的某个特性是否存在,最常用的是以下函数:

function isHostMethod(object,property){
    var t = typeof object[property];
    return t=='function' || (!!(t=='object' && object[property])) || t=='unknown';
}

二、怪癖检测

怪癖检测的目标是识别浏览器的特殊行为,即浏览器存在什么缺陷。通常需要运行一小段代码,以确定某一特性不能正常工作。


三、用户代理检测

用户代理检测通过检测用户代理字符串来确定实际使用的浏览器。在每一个HTTP请求过程中,用户代理字符串是通过响应首部发送的,可以通过navigator.userAgent属性访问。

  1. 五大主流呈现引擎用户代理字符串
  • IE
IE的用户代理字符串格式:
Moailla/4.0 (compatible; MSIE 版本号; 操作系统; Trident/Trident版本号)
IE8用户代理字符串:
Moailla/4.0 (compatible; MSIE 8.0 Windows NT 5.1 ; Trident/4.0 )
  • Gecko
Gecko的用户代理字符串格式:
Mozilla/Mozilla版本号 (操作系统或CPU; 与发行版本) Gecko/Gecko版本 应用程序或产品/应用程序或产品版本号
Firefox4用户代理字符串:
Mozilla/5.0 (windows NT 6.1 rv:2.0.1 ) Gecko/20100101 Firefox 4.0.1
  • KHTML
KHTML的用户代理字符串格式:
Mozilla/5.0 (compatible; Konqueror/ 版本号; 操作系统或CPU) KHTML/KHTML版本号 (like Gecko)
示例:
Mozilla/5.0 (compatible; Konqueror/ 3.5 SunOS ) KHTML/3.5.0 (like Gecko)
  • WebKit
WebKit的用户代理字符串格式如下:
Mozilla/5.0 (平台; 加密类型; 操作系统或CPU; 语言)  AppleWebKit/AppleWebKit版本号 (KHTML, like Gecko) Safari/Safari版本号
示例:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1
  • Opera
Opera 10的代理字符串格式如下:
Opera/9.80 (操作系统或CPU; 加密类型; 语言)  Presto/Presto版本号 Version/版本号
其中, Presto是Opera的呈现引擎。加密类型:U(128位加密)、I(40位加密)、N(未加密)
如Windows7中Opera10.63的用户代理字符串如下:
Opera/9.80 (Windows NT 6.1 U en )  Presto/2.6.30 Version/10.63
但Opera有两种修改用户代理字符串的方式。第一种是将自身标识为另外一个浏览器,如Firefox:
Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50
第二种是把自己装扮成Firefox或IE,这种情况下的用户代理字符串中既没有Opera字样,也不包含Opera版本信息。
2.用户代理字符串检测

  • 第一步是识别Opera。因为它的用户代理字符串有可能完全模仿其他浏览器。可以用window.opera对象检测Opera。调用Version()方法可以返回一个表示浏览器版本的字符串。
  • 第二步是识别WebKit。因为WebKit的用户代理字符串中包含Gecko和KHTML这两个字符串。但是WebKit用户代理字符串中的AppleWebkit是独一无二的,可以通过检测这个字符串来确定是否是Webkit。
  • 第三步是检测KHTML。因为KHTML的用户代理字符串中也包含Gecko,所以在排除KHTML之前,无法准确检测基于Gecko的浏览器。在排除了WebKit之后,可以用过检测‘KHTML’字符串来检测KHTML引擎。但由于Konqueror3.1及更早版本中不包含KHTML的版本,所以同时需要检测Konqueror。
  • 第四步是检测Gecko。派出了Webkit和KHTML之后,可以通过检测‘Gecko’字符串来检测Gecko引擎。
  • 最后检测的是IE。可以通过查找‘MSIE’来检测是否为IE引擎。
代码如下:
var client = function(){
	var engine={
		//呈现引擎
		ie: 0,
		gecko: 0,
		webkit: 0,
		khtml: 0,
		opera: 0,
		//具体版本号
		ver: null
	};
	//检测呈现引擎
	//Opera
	var ua = navigator.userAgent;
	if(window.opera){
		engine.ver  = window.opera.version();
		engine.opera =  parseFloat(engine.ver);
	}else if(/AppleWebKit\/(\S+)/.test(ua)){  //Webkit
		engine.ver = RegExp['$1'];
		engine.webkit = parseFloat(engine.ver);
	}else if(/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){  //KHTML
		engine.ver = RegExp['$1'];
		engine.khtml = parseFloat(engine.ver);
	}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){   //Gecko
		engine.ver = RegExp['$1'];
		engine.gecko = parseFloat(engine.ver);
	}else if(/MSIE ([^;]+)/.test(ua)){   //ie
		engine.ver = RegExp['$1'];
		engine.ie = parseFloat(engine.ver);
	}
}();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值