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

2019-04-01  本文已影响0人  简默丶XS

能力检测

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

  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 协议规范)是这样描述用户代理字符串的

稀里糊涂的一章。

上一篇下一篇

猜你喜欢

热点阅读