什么是能力检测
能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。采用这种方式不必顾及特定的浏览器如何如何,只要确定浏览器支持特定的能力,就可以给出解决方案。
能力检测的基本模式
if(object.propertyInQuestion){
//使用object.propertyInQuestion
}
例如:
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!");
}
}
更可靠的能力检测
利用类型转换来确定某个对象成员是否存在,但这样你还是不知道该成员是不是你想要的。
在可能的情况下,要尽量使用 typeof 进行能力检测。
例如:
function isHostMethod(object, property) {
var t = typeof object[property];
return t=='function' ||
(!!(t=='object' && object[property])) ||
t=='unknown';
}
能力检测,不是浏览器检测
实际上,根据浏览器不同将能力组合起来是更可取的方式。如果你知道自己的应用程序需要使用某些特定的浏览器特性,那么好是一次性检测所有相关特性,而不要分别检测。
例如:
//确定浏览器是否支持 Netscape 风格的插件
var hasNSPlugins = !!(navigator.plugins && navigator.plugins.length);
//确定浏览器是否具有 DOM1 级规定的能力
var hasDOM1 = !!(document.getElementById && document.createElement &&
document.getElementsByTagName);