前端开发中,在呈现引擎、浏览器、平台、操做系统、引动设备、游戏系统存在差别的状况下,咱们的代码会出现不少不兼容问题。前端
而,客户端检测,就是分辨上述6个种类的方法,进而可使咱们针对不一样的状况运行不一样的代码。可是客户端检测是很是麻烦的,这毫不是第一个考虑的方式。android
具体的客户端检测,能够在JavaScript高级编程设计的 客户端检测 这一章获得认真的解析,包括方法。也能够在网上搜索。不过多介绍。ios
咱们平时开发中,为了写出兼容的代码,客户端检测用的绝对不是最多的,它常常是排到最后一位来使用,也就是完全没办法的时候才用。web
下面来讲一下,其它的优先级比较高的检测方式。chrome
一、能力检测:编程
咱们能够判断一个方法是否能用,或者一个方法是否存在,而后再使用这些方法,这样就不会出现错误。也就是先检测有没有这项能力。windows
二、怪癖检测:它的目标是 识别浏览器的特殊行为,如IE8更早版本,存在一个bug,某个实例属性与[[Enumerable]]标记为false的某个原型属性同名,那么该实例属性将不会出如今for-in循环中。能够yoga以下代码来检测;浏览器
var hasDontEnumQuirk = function(){
var o = { toString:function(){} };
for ( var prop in o){
if(prop == "toString"){
return false;
}
}
return true;
}();
//此代码 就能够检测 存不存在这种怪癖
从而能够针对这种状况写一些兼容代码;iphone
而在前两种方法都解决不了兼容性的状况下,咱们才采用 客户端检测 ,ui
肯定是什么引擎(opera、webkit、KHTML、Gecko、IE);
肯定是什么浏览器:chrome、opera、konq、safari、firefox、IE;
肯定是什么平台:win(windows)、mac、xll(Unix);
肯定是什么操做windows系统:"2000"、"XP"、"Vista"、"7"、"NT"、"ME"、RegExp["$1"];
肯定是什么移动设备:iphone、ipod、ios、android、nokiaN、winMobile;
肯定是什么游戏系统:wii、ps
当咱们检测出这些信息后,就能够根据不一样状况写兼容代码了,不过这种方法,不到万不得已,不推荐使用。