欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript高级程序设计第九章-客户端检测

程序员文章站 2022-06-15 13:39:01
...

能力检测:

最常用也最为人们广泛接受的客户端检测形式是能力检测(又称特性检测)。能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。

//IE5之前不支持document.getElementById()
 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!");     
     }
} 

更可靠的能力检测:

function isSortable(object){
     return !!object.sort;
}  

这个函数通过检测对象是否存在sort()方法,来确定对象是否支持排序。问题是,任何包含sort属性的对象也会返回true。

var result = isSortable({ sort: true }); 

检测某个属性是否存在并不能确定对象是否支持排序。更好的方式是检测sort是不是一个函数。

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

typeof的行为不标准。比如:大多数浏览器在检测到 document.createElement() 存在时,都会返回 true;但 在 IE8及之前版本中,返回 false,因为 typeof document.createElement 返回的是 “object”,而不是"function"。

DOM对象是宿主对象,IE及更早版本中的宿主对象是通过 COM而非 JScript 实现的。因此,document.createElement()函数确实是一个 COM 对象,所以 typeof 才会返回"object"。IE9纠正了这个问题,对所有 DOM方法都返回"function"。

 //在 IE8及之前版本中不行  
 function hasCreateElement(){
      return typeof document.createElement == "function"; 
} 
相关标签: