客户端检测
- 能力检测
- 先检测达到目的的最常用的特性。
- 必须检测实际要用到的特性。
- 尽可能的使用typeof进行能力检测。对所有DOM方法都返回"function"。
- 如果知道自己的应用程序需要使用某些特定的浏览器特性,最好是一次性检测所有相关特性,而不是分开检测。
- 怪癖检测
- 识别浏览器的特殊行为,即想要知道浏览器存在什么缺陷。
- 建议仅检测那些有直接影响的浏览器怪癖,且最好在脚本一开始就执行此类检测。
- 用户代理检测
- 通过检测用户代理字符串来确定实际使用的浏览器。在每一次HTTP请求过程中,用户代理字符串是作为相应首部发送的,且该字符粗可以通过JavaScript的navigator.userAgent属性访问到。
- 在服务器端,通过检测用户代理字符串来确定用户使用的的浏览器是常用且能接受的做法。
- 在客户端,用户代理检测排在能力检测和怪癖检测之后。
- 每个浏览器的用户代理字符串都不尽相同,所以要分开识别。
- 用户代理字符串检测技术
- 识别呈现引擎
- Firefox,chrome和Netscape使用相同版本的GecKo,那么它们一定支持相同的特性。
- 不管什么浏览器,只要它和Safari3使用相同版本的WebKit,那么该浏览器就和Safari3有相同的功能。
- 所以,编写的脚本主要检测五大呈现引擎:Gecko,WbbKit,KHTML,IE和Opera。
- 检测顺序
- Opera。检测window.opera对象,调用version()方法可以返回一个表示浏览器版本的字符串。
- WebKit。检测其用户代理字符串中的"AppleWebKit"。
- KHTML。KHTML的版本号与后继的标记之间有一个空格,所以要使用特殊的非空格字符来取得与版本号相关的所有字符。如果KHMTL不在用户代理中,就要匹配Konqueror后跟一个斜杠,再后跟不包含分号的所有字符。
- Gecko。在用户代理中,其版本号不会出现在字符串Gecko后面,而是出现在字符串"rv:"后。
- IE。其版本号位于字符串"MSIE"的后面,一个分号的前面。
- 识别浏览器
- 识别平台
- 主流大三平台:windows,Mac,Unix(包含各种Linux)
- 使用navigator.platform,其属性值在不同的浏览器中都是一致的。其属性值有"Win32","Win64","MacPPC","MacIntel","Xll","Linux i686"。
- 识别windows系统
- 识别移动设备
- 识别游戏系统
- 识别呈现引擎
小结
能力检测:在编写代码之前先检测特定浏览器的能力。比如,脚本在调用某个函数之前,可能要先检测函数时候存在。这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上面。能力检测无法检测出特定的浏览器和版本。
怪癖检测:怪癖实际上是浏览器中存在的bug。怪癖检测通常涉及到运行一小段代码,然后确定浏览器是否存在某个bug。怪癖检测无法检测出特定的浏览器和版本。
用户代理检测:通过用户代理字符串来识别浏览器。用户代理字符串中包含大量与浏览器有关的信息,包括浏览器,平台,操作系统,以及浏览器版本。有些浏览器会在用户代理中添加一些欺骗性信息,欺骗网站相信自己是另一种浏览器。用户代理检测需要特殊技巧,特别要注意Opera浏览器会隐瞒其用户代理字符串的情况。
综上:优先考虑能力检测,怪癖检测是确定应该如何处理代码的第二选择,最后才使用用户代理检测。