前端开发中,在呈现引擎、浏览器、平台、操作系统、引动设备、游戏系统存在差异的情况下,我们的代码会出现很多不兼容问题。
而,客户端检测,就是分辨上述6个种类的方法,进而可以使我们针对不同的情况运行不同的代码。但是客户端检测是非常麻烦的,这绝不是第一个考虑的方式。
具体的客户端检测,可以在JavaScript高级编程设计的 客户端检测 这一章得到认真的解析,包括方法。也可以在网上搜索。不过多介绍。
我们平时开发中,为了写出兼容的代码,客户端检测用的绝对不是最多的,它经常是排到最后一位来使用,也就是彻底没办法的时候才用。
下面来说一下,其它的优先级比较高的检测方式。
1、能力检测:
我们可以判断一个方法是否能用,或者一个方法是否存在,然后再使用这些方法,这样就不会出现错误。也就是先检测有没有这项能力。
2、怪癖检测:它的目标是 识别浏览器的特殊行为,如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;
}();
//此代码 就可以检测 存不存在这种怪癖
从而可以针对这种情况写一些兼容代码;
而在前两种方法都解决不了兼容性的情况下,我们才采用 客户端检测 ,
确定是什么引擎(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
当我们检测出这些信息后,就可以根据不同情况写兼容代码了,不过这种方法,不到万不得已,不推荐使用。