举例来说,IE5.0以前并不支持document.getElementById()这个DOM方法。尽管可以使用document.all属性来实现相同的目的,但是IE5.0以前并没有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")
}
}
getElement("list")
在大多数浏览器在检测到document.createElement()这个方法都会返回true。但是在IE8以前的版本不行
function hasCreateElement(){
return typeof document.createElement=="function";
}
//IE8之前返回false,这个类型是object,
DOM对象就是宿主对象,IE和更早版本的宿主对象是通过COM而非JSript实现的。因此document.createElement()函数是一个COM对象,所以typeof才会返回”object”,IE9修正了这个问题。
我们对客户端进行检测的时候,不能检测某个或几个属性来确定浏览器,例如
var isFireFox=!!(navigator.vendor&&navigator.vendorSub)//Safari也实现了相同的属性。
var isIE=!!(document.all&&document.uniqueID)//假设了IE以后的版本还会存在这两个属性,并且其他浏览器都不会实现这个功能
如果你知道你自己的应用程序需要使用某种特定的浏览器特性,最好是检测一次所有的相关特性,而不要分别检测。
var hasNSPlugins=!!(navigator.plugins&&navigator.plugins.length);//是否支持NetScape
var hasDOM1=!!(document.getElementById&&document.createElement&&document.getElementsByTagName)
用户代理检测
很多时候,我们需要确切的知道浏览器的呈现引擎。我们编写的脚本将主要检测5种呈现引擎:IE、Gecok、webki、KHTML、Opera