本文基本抄自簡(jiǎn)書原文《JavaScript判斷瀏覽器類型》
以為的:
var explorer = window.navigator.userAgent;
//判斷是否為IE瀏覽器
if (explorer.indexOf("MSIE") >= 0) {
return 'ie';
}
//判斷是否為Firefox瀏覽器
else if (explorer.indexOf("Firefox") >= 0) {
return 'Firefox';
}
//判斷是否為Chrome瀏覽器
else if (explorer.indexOf("Chrome") >= 0) {
return 'Chrome';
}
//判斷是否為Opera瀏覽器
else if (explorer.indexOf("Opera") >= 0) {
return 'Opera';
}
//判斷是否為Safari瀏覽器
else if (explorer.indexOf("Safari") >= 0) {
return 'Safari';
}
解釋
其實(shí)使用瀏覽器的userAgent來(lái)判斷是不準(zhǔn)的,用戶可以修改:
-
Firefox 中,在 about:config 頁(yè)面添加并修改。
general.useragent.override選項(xiàng)的值來(lái)覆蓋默認(rèn)的用戶代理字符串。一些Firefox擴(kuò)展也可以用其他方式修改這個(gè)值,但它們通常只會(huì)修改發(fā)送到服務(wù)器的User-Agent請(qǐng)求頭的值,而不會(huì)影響 JavaScript 代碼中獲取的 window.navigator.userAgent 屬性的值。 -
Opera 6+ 中通過(guò)菜單選擇不同的用戶代理字符串。
-
Microsoft Internet Explorer 使用注冊(cè)表來(lái)配置自己的用戶代理字符串。
-
Safari 和 iCab 可修改其用戶代理字符串。
通過(guò)各個(gè)瀏覽器的特征來(lái)判斷:
-
IE
只有IE支持創(chuàng)建ActiveX控件,它有一個(gè)其他瀏覽器沒(méi)有的東西,就是ActiveXObject函數(shù)。只要判斷window對(duì)象存在ActiveXObject函數(shù),就可以明確判斷出當(dāng)前瀏覽器是IE -
Safari
Safari瀏覽器中有一個(gè)其他瀏覽器沒(méi)有的openDatabase函數(shù),可做為判斷Safari的標(biāo)志 -
Chrome
Chrome有一個(gè)MessageEvent函數(shù),但Firefox也有。不過(guò),好在Chrome并沒(méi)有Firefox的getBoxObjectFor函數(shù),根據(jù)這個(gè)條件還是可以準(zhǔn)確判斷出Chrome瀏覽器的 -
Firefox
Firefox中的DOM元素都有一個(gè)getBoxObjectFor函數(shù),用來(lái)獲取該DOM元素的位置和大?。↖E對(duì)應(yīng)的中是getBoundingClientRect函數(shù))。這是Firefox獨(dú)有的,判斷它即可知道是當(dāng)前瀏覽器是Firefox -
Opera
Opera提供了專門的瀏覽器標(biāo)志,就是window.opera屬性
正解:
if (window.ActiveXObject)
return "IE";
else if (document.getBoxObjectFor)
return "Firefox";
else if (window.MessageEvent && !document.getBoxObjectFor)
return "Chrome";
else if (window.opera)
return "Opera";
else if (window.openDatabase)
return "Safari";