美文网首页
第九章 客户端检测(js高级程序设计)

第九章 客户端检测(js高级程序设计)

作者: 简默丶XS | 来源:发表于2019-04-01 16:33 被阅读0次
    • 在现实当中,浏览器之间的差异以及不同浏览器的“怪癖”( quirk),多得简直不胜枚举。因此,客户端检测除
      了是一种补救措施之外,更是一种行之有效的开发策略。
    • 检测 Web 客户端的手段很多,而且各有利弊。但最重要的还是要知道,不到万不得已,就不要使
      用客户端检测。只要能找到更通用的方法,就应该优先采用更通用的方法。一言以蔽之,先设计最通用
      的方案,然后再使用特定于浏览器的技术增强该方案。

    能力检测

    判断浏览器能力,而不是区分浏览器

      function getElement(id) {
        if (document.getElementById) {
          return document.getElementById(id);
        } else if (document.all) {
          return document.all[id];
        } else {
          throw new Error("No way to retrieve element!");
        }
      }
    

    更可靠的能力检测:
    使用type类型去判断属性的存在,而不是单独检测属性的存在
    例如:object.solt 可能是函数,也可能是一个普通类型的值

    function isSortable(object){
      return typeof object.sort == "function";
    }
    

    最保守的检查方法:

      //作者: 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
    

    注意小技巧,!是取非,!!则是转换为布尔类型

    能力检测不是浏览器检测:
    在实际开发中,应该将能力检测作为确定下一步解决方案的依据,而不是用它来
    判断用户使用的是什么浏览器。

    怪癖检查

    与能力检测类似, 怪癖检测(quirks detection)的目标是识别浏览器的特殊行为。但与能力检测确认浏览器支持什么能力不同,怪癖检测是想要知道浏览器存在什么缺陷(“怪癖”也就是 bug)

    1. IE8 及更早版本中存在一个 bug,即如果某个实例属性与[[Enumerable]]标记为 false 的某个原型属性同名,那么该实例属性将不会出现在fon-in 循环当中

    2. Safari 3 以前版本会枚举被隐藏的属性

    用户代理检测

    1.HTTP 规范(包括 1.0 和 1.1 版)明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号。 RFC 2616(即 HTTP 1.1 协议规范)是这样描述用户代理字符串的

    稀里糊涂的一章。

    相关文章

      网友评论

          本文标题:第九章 客户端检测(js高级程序设计)

          本文链接:https://www.haomeiwen.com/subject/rwuupqtx.html