第八章

客户端检测

  1. 能力检测
    1. 先检测达到目的的最常用的特性。
    2. 必须检测实际要用到的特性。
    3. 尽可能的使用typeof进行能力检测。对所有DOM方法都返回"function"。
    4. 如果知道自己的应用程序需要使用某些特定的浏览器特性,最好是一次性检测所有相关特性,而不是分开检测。
  2. 怪癖检测
    1. 识别浏览器的特殊行为,即想要知道浏览器存在什么缺陷。
    2. 建议仅检测那些有直接影响的浏览器怪癖,且最好在脚本一开始就执行此类检测。
  3. 用户代理检测
    1. 通过检测用户代理字符串来确定实际使用的浏览器。在每一次HTTP请求过程中,用户代理字符串是作为相应首部发送的,且该字符粗可以通过JavaScript的navigator.userAgent属性访问到。
    2. 在服务器端,通过检测用户代理字符串来确定用户使用的的浏览器是常用且能接受的做法。
    3. 在客户端,用户代理检测排在能力检测和怪癖检测之后。
    4. 每个浏览器的用户代理字符串都不尽相同,所以要分开识别。
  4. 用户代理字符串检测技术
    1. 识别呈现引擎
      1. Firefox,chrome和Netscape使用相同版本的GecKo,那么它们一定支持相同的特性。
      2. 不管什么浏览器,只要它和Safari3使用相同版本的WebKit,那么该浏览器就和Safari3有相同的功能。
      3. 所以,编写的脚本主要检测五大呈现引擎:Gecko,WbbKit,KHTML,IE和Opera。
      4. 检测顺序
        1. Opera。检测window.opera对象,调用version()方法可以返回一个表示浏览器版本的字符串。
        2. WebKit。检测其用户代理字符串中的"AppleWebKit"。
        3. KHTML。KHTML的版本号与后继的标记之间有一个空格,所以要使用特殊的非空格字符来取得与版本号相关的所有字符。如果KHMTL不在用户代理中,就要匹配Konqueror后跟一个斜杠,再后跟不包含分号的所有字符。
        4. Gecko。在用户代理中,其版本号不会出现在字符串Gecko后面,而是出现在字符串"rv:"后。
        5. IE。其版本号位于字符串"MSIE"的后面,一个分号的前面。
    2. 识别浏览器
    3. 识别平台
      1. 主流大三平台:windows,Mac,Unix(包含各种Linux)
      2. 使用navigator.platform,其属性值在不同的浏览器中都是一致的。其属性值有"Win32","Win64","MacPPC","MacIntel","Xll","Linux i686"。
    4. 识别windows系统
    5. 识别移动设备
    6. 识别游戏系统

小结

能力检测:在编写代码之前先检测特定浏览器的能力。比如,脚本在调用某个函数之前,可能要先检测函数时候存在。这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上面。能力检测无法检测出特定的浏览器和版本。
怪癖检测:怪癖实际上是浏览器中存在的bug。怪癖检测通常涉及到运行一小段代码,然后确定浏览器是否存在某个bug。怪癖检测无法检测出特定的浏览器和版本。
用户代理检测:通过用户代理字符串来识别浏览器。用户代理字符串中包含大量与浏览器有关的信息,包括浏览器,平台,操作系统,以及浏览器版本。有些浏览器会在用户代理中添加一些欺骗性信息,欺骗网站相信自己是另一种浏览器。用户代理检测需要特殊技巧,特别要注意Opera浏览器会隐瞒其用户代理字符串的情况。
综上:优先考虑能力检测,怪癖检测是确定应该如何处理代码的第二选择,最后才使用用户代理检测。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • location location.href和 window.location的作用一样,都新打开一个url在历史...
    辣子_阅读 2,383评论 0 0
  • 1、JavaScript简介 1.1、发展历程 》 1992年:Nombas公司开发C-minus-minus(...
    TerryLiu05阅读 1,432评论 0 0
  • Windows对象全局作用域全局作用域中声明的变量,函数和方法都会变成windows的属性和方法窗口关系及框架每个...
    27亿光年中的小小尘埃阅读 482评论 0 0
  • 1.BOM的核心对象是window对象,他表示浏览器的一个实例 2.全局变量不能通过delete操作符删除 3.窗...
    shirley_liang阅读 3,017评论 0 0
  • 8 管理支付和订单 在上一章中,你创建了一个包括商品目录和订单系统的在线商店。你还学习了如何用Celery启动异步...
    lakerszhy阅读 6,976评论 1 4

友情链接更多精彩内容