检测Web客户端的手段不少,并且各有利弊,可是不到万不得已,不要使用客户端检测。只要能找到更通用的方法,就应该采用更通用的方法。先设计最通用的方案,而后再使用特定于浏览器的技术加强该方案。浏览器
最经常使用最为普遍使用的客户端检测形式,又称特性检测。能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。采用这种方式没必要顾及特定的浏览器如何如何,只要确认浏览器支持特定的能力,就能够根据具体状况,给出解决方案。
能力检测有两个重要的概念:bash
function isHostMethod(object,property){
var t = typeof object[property];
return t == 'function' || (!!(t=='object' && object[property])) || t == 'unknown';
}
复制代码
使用方法:函数
result = isHostMethod(xhr,"open");//true
result = isHostMethod(xhr,"foo");//false
复制代码
浏览器不是一会对这些实现方法一成不变的,每次浏览器更新版本都有可能改变这些能力特性的实现,因此要实时对代码功能进行预测以及评估风险。最后能力检测不是浏览器检测,不少浏览器之间会有类似的能力特性,因此具体某特性不必定就是某浏览器。post
怪癖检测的目的是识别浏览器的特殊行为。可是与能力检测确认浏览器支持什么能力不一样,怪癖检测是想要知道浏览器存在什么缺陷(“怪癖”也就是bug)。这一般须要运行一小段代码,以确认某一特性不能正常工做。测试
通常来讲,“怪癖”都是个别浏览器所独有的,并且一般被归为bug。在相关浏览器的新版本中,这些问题可能会也可能不会被修复。因为检测“怪癖”涉及运行代码,所以建议仅检测那些对你有直接影响的“怪癖”,并且最好在脚本一开始就执行此类检测,以便尽早解决问题。优化
客户端检测另外一部分是用户代理检测ui