Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12 其中,版本號是Firefox之后的數(shù)字.
Opera
Opera提供了專門的瀏覽器標志,就是window.opera屬性.
Opera典型的userAgent如下:
Opera/9.27 (Windows NT 5.2; U; zh-cn)
Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0
其中,版本號是靠近Opera的數(shù)字.
Safari
Safari瀏覽器中有一個其他瀏覽器沒有的openDatabase函數(shù),可做為判斷Safari的標志.
Safari典型的userAgent如下:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
其版本號是Version之后的數(shù)字.
Chrome
Chrome有一個MessageEvent函數(shù),但Firefox也有.不過,好在Chrome并沒有Firefox的getBoxObjectFor函數(shù),根據(jù)這個條件還是可以準確判斷出Chrome瀏覽器的.
目前,Chrome的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
其中,版本號在Chrome之后的數(shù)字.
有趣的是,Chrome的userAgent還包含了Safari的特征,也許這就是Chrome可以運行所有Apple瀏覽器應用的基礎(chǔ)吧.
Navigator
目前,Navigator的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6
其中,版本號在Navigator之后的數(shù)字.
通過觀察以上各瀏覽器的差異,可以用JavaScript區(qū)分出各瀏覽器的,但沒有判斷是否兼容w3c標準,看了看ExtJs的源代碼,發(fā)現(xiàn)其中就有對瀏覽器類型以及版本和操作系統(tǒng)的判斷.
源碼如下:
ua = navigator.userAgent.toLowerCase(),
check = function(r){
return r.test(ua);
},
isStrict = document.compatMode == “CSS1Compat”,
isOpera = check(/opera/),
isChrome = check(/chrome/),
isWebKit = check(/webkit/),
isSafari = !isChrome && check(/safari/),
isSafari3 = isSafari && check(/version/3/),
isSafari4 = isSafari && check(/version/4/),
isIE = !isOpera && check(/msie/),
isGecko = !isWebKit && check(/gecko/),
isGecko3 = isGecko && check(/rv:1.9/),
isBorderBox = isIE && !isStrict,
isWindows = check(/windows|win32/),
isMac = check(/macintosh|mac os x/),
isAir = check(/adobeair/),
isLinux = check(/linux/)
關(guān)于document.compatMode
IE對盒模型的渲染在 Standards Mode和Quirks Mode是有很大差別的,在Standards Mode下對于盒模型的解釋和其他的標準瀏覽器是一樣,但在Quirks Mode模式下則有很大差別,而在不聲明Doctype的情況下,IE默認又是Quirks Mode.
document.compatMode正好派上用場,它有兩種可能的返回值:BackCompat和CSS1Compat,對其解釋如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
在實際的項目中,我們還需要在獲取瀏覽是否IE,這樣就可以得到IE的渲染模式了.在ExtJs中的代碼:isBorderBox=isIE&&!isStrict.
當文檔有了標準聲明時, document.compatMode 的值就等于 “CSS1compat”, 因此, 我們可以根據(jù) document.compatMode 的值來判斷文檔是否加了標準聲明
var height = document.compatMode==”CSS1Compat” ? document.documentElement.clientHeight : document.body.clientHeight;