本文基本抄自簡書原文《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';
}
解釋
其實使用瀏覽器的userAgent來判斷是不準的棍弄,用戶可以修改:
-
Firefox 中脊阴,在 about:config 頁面添加并修改。
general.useragent.override選項的值來覆蓋默認的用戶代理字符串责嚷。一些Firefox擴展也可以用其他方式修改這個值鸳兽,但它們通常只會修改發(fā)送到服務(wù)器的User-Agent請求頭的值,而不會影響 JavaScript 代碼中獲取的 window.navigator.userAgent 屬性的值罕拂。 -
Opera 6+ 中通過菜單選擇不同的用戶代理字符串揍异。
-
Microsoft Internet Explorer 使用注冊表來配置自己的用戶代理字符串。
-
Safari 和 iCab 可修改其用戶代理字符串爆班。
通過各個瀏覽器的特征來判斷:
-
IE
只有IE支持創(chuàng)建ActiveX控件衷掷,它有一個其他瀏覽器沒有的東西,就是ActiveXObject函數(shù)柿菩。只要判斷window對象存在ActiveXObject函數(shù)戚嗅,就可以明確判斷出當(dāng)前瀏覽器是IE -
Safari
Safari瀏覽器中有一個其他瀏覽器沒有的openDatabase函數(shù),可做為判斷Safari的標志 -
Chrome
Chrome有一個MessageEvent函數(shù)枢舶,但Firefox也有懦胞。不過,好在Chrome并沒有Firefox的getBoxObjectFor函數(shù)凉泄,根據(jù)這個條件還是可以準確判斷出Chrome瀏覽器的 -
Firefox
Firefox中的DOM元素都有一個getBoxObjectFor函數(shù)躏尉,用來獲取該DOM元素的位置和大小(IE對應(yīng)的中是getBoundingClientRect函數(shù))旧困。這是Firefox獨有的醇份,判斷它即可知道是當(dāng)前瀏覽器是Firefox -
Opera
Opera提供了專門的瀏覽器標志,就是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";