客户端检测是javascript 中争议最多的话题之一。 因为不同浏览器之前存在差异,所以经常需要根据浏览器的能力来编写不同的代码。客户端检测有不少方式, 但下面两种用得最多。
能力检测,在使用之前先测试浏览器的特定能力。例如,脚本可以在调用某个函数之前先检查它是否存在。这个客户端检测方式可以让开发者不必考虑特定的浏览器或版本,而只需要关注某些能力是否存在。能力检测不能精确地反映特定的浏览器或版本。
用户代理检测, 通过用户代理字符串确定浏览器。用户代理字符串包含关于浏览器的很多信息,通常包括浏览器、平台、操作系统和浏览器版本。用户代理字符串有一个相当长的发展史,很多浏览器都试图欺骗网站相信自己是别的浏览器用户代理检测也比较麻烦, 特别是涉及Opera会在代理字符串中隐藏自己信息的时候。 即使如此,用户代理字符串也可以用来确认浏览器使用的渲染引擎以及平台,包括移动设备和游戏机。
在选择客户端检测方式时,首选是使用能力检测。特殊能力检测要放在次要位置,作为决定代码逻辑的参考。用户代理检测是最后一个选择,因为它过于依赖用户代理字符串。
浏览器也提供了一些软件和硬件相关的信息。这些信息通过screen和navigator对象暴露出来,利用这些API,可以获取关于操作系统、浏览器、硬件、设备位置、电池状态等方面的准确信息。