js客户端检测-能力检测&怪癖检测

检测Web客户端的手段不少,并且各有利弊,可是不到万不得已,不要使用客户端检测。只要能找到更通用的方法,就应该采用更通用的方法。先设计最通用的方案,而后再使用特定于浏览器的技术加强该方案。浏览器

能力检测

最经常使用最为普遍使用的客户端检测形式,又称特性检测。能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。采用这种方式没必要顾及特定的浏览器如何如何,只要确认浏览器支持特定的能力,就能够根据具体状况,给出解决方案。
能力检测有两个重要的概念:bash

  • 一是先检测达成目的的最经常使用的特性。
    先检测最经常使用的特性能够保证代码最优化,由于在多数状况下均可以免测试多个条件。
  • 二是必须测试实际要用到的特性。
    一个特性的存在,不必定意味着另外一个特性也存在。 在目前,浏览器环境下测试任何对象的某个特性是否存在,可使用下面这个函数,(ps:做者是Peter Michaux)
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

相关文章
相关标签/搜索