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";
}
上一篇: 多线程实现大批量数据导入
推荐阅读
-
javaScript高级程序设计:正则表达式代码实例
-
JavaScript高级程序设计第五章引用类型——RegExp类型
-
JavaScript高级程序设计之变量,作用域和内存问题总结
-
javascript高级程序设计(第三版)学习笔记(一) 正则表达式整理
-
《JavaScript高级程序设计》笔记:事件(十三)
-
《JavaScript高级程序设计》笔记:DOM扩展(十一)
-
《JavaScript高级程序设计》笔记:表单脚本(十四)
-
《JavaScript高级程序设计》笔记:使用Canvas绘图(15)
-
javascript高级程序设计学习历程
-
javascript高级程序设计第三版 第六章 面向对象的程序设计