亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js判斷瀏覽器類型,版本的代碼(附多個實例代碼)

2019-11-20 15:05:36
字體:
來源:轉載
供稿:網友

在網站前端開發中,瀏覽器兼容性問題本已讓我們手忙腳亂,Chrome的出世不知道又要給我們添多少亂子。瀏覽器兼容性是前端開發框架要解決的第一個問題,要解決兼容性問題就得首先準確判斷出瀏覽器的類型及其版本。

JavaScript是前端開發的主要語言,我們可以通過編寫JavaScript程序來判斷瀏覽器的類型及版本。JavaScript判斷瀏覽器類型一般有兩種辦法,一種是根據各種瀏覽器獨有的屬性來分辨,另一種是通過分析瀏覽器的userAgent屬性來判斷的。在許多情況下,值判斷出瀏覽器類型之后,還需判斷瀏覽器版本才能處理兼容性問題,而判斷瀏覽器的版本一般只能通過分析瀏覽器的userAgent才能知道。

我們先來分析一下各種瀏覽器的特征及其userAgent。

IE

只有IE支持創建ActiveX控件,因此她有一個其他瀏覽器沒有的東西,就是ActiveXObject函數。只要判斷window對象存在ActiveXObject函數,就可以明確判斷出當前瀏覽器是IE。而IE各個版本典型的userAgent如下:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)

其中,版本號是MSIE之后的數字。

Firefox

Firefox中的DOM元素都有一個getBoxObjectFor函數,用來獲取該DOM元素的位置和大?。↖E對應的中是getBoundingClientRect函數)。這是Firefox獨有的,判斷它即可知道是當前瀏覽器是Firefox。Firefox幾個版本的userAgent大致如下:

Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
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之后的數字。

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的數字。

Safari

Safari瀏覽器中有一個其他瀏覽器沒有的openDatabase函數,可做為判斷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之后的數字。

Chrome

Chrome有一個MessageEvent函數,但Firefox也有。不過,好在Chrome并沒有Firefox的getBoxObjectFor函數,根據這個條件還是可以準確判斷出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只后的數字。

有趣的是,Chrome的userAgent還包含了Safari的特征,也許這就是Chrome可以運行所有Apple瀏覽器應用的基礎吧。

只要了解了以上信息,我們就可以根基這些特征來判斷瀏覽器類型及其版本了。我們會將判斷的結果保存在Sys名字空間中,成為前端框架的基本標志信息,供今后的程序來讀取。如果判斷出謀種瀏覽器,Sys名字空間將有一個該瀏覽器名稱的屬性,其值為該瀏覽器的版本號。例如,如果判斷出IE 7.0,則Sys.ie的值為7.0;如果判斷出Firefox 3.0,則Sys.firefox的值為3.0。下面是判斷瀏覽器的代碼:


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

我們把對IE的判斷放在第一,因為IE的用戶最多,其次是判斷Firefox。按使用者多少的順序來判斷瀏覽器類型,可以提高判斷效率,少做無用功。之所以將Chrome放在第三判斷,是因為我們預測Chrome很快會成為市場占有率第三的瀏覽器。其中,在分析瀏覽器版本時,用到了正則表達式來析取其中的版本信息。

如果你的JavaScript玩得很高,你還可以將前面的判斷代碼寫成這樣:


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

這樣可以使JavaScript代碼更精簡些。當然,可讀性稍差一些,就看你是重視效率還是重視可維護性了。

使用不同特征來判斷瀏覽器的方法,雖然在速度上比用正則表達式分析userAgent要來的快,不過這些特征可能會隨瀏覽器版本而變化。比如,一種瀏覽器本來獨有的特性取得了市場上的成功,其他瀏覽器也就可能跟著加入該特性,從而使該瀏覽器的獨有特征消失,導致我們的判斷失敗。因此,相對比較保險的做法是通過解析userAgent中的特征來判斷瀏覽器類型。何況,反正判斷版本信息也需要解析瀏覽器的userAgent的。

通過分析各類瀏覽器的userAgent信息,不難得出分辨各類瀏覽器及其版本的正則表達式。而且,對瀏覽器類型的判斷和版本的判斷完全可以合為一體地進行。于是,我們可以寫出下面的代碼:


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

其中,采用了“... ? ... : ...”這樣的判斷表達式來精簡代碼。判斷條件是一條賦值語句,既完成正則表達式的匹配及結果復制,又直接作為條件判斷。而隨后的版本信息只需從前面的匹配結果中提取即可,這是非常高效的代碼。

以上的代碼都是為了打造前端框架所做的預研,并在五大瀏覽器上測試通過。今后,判斷某種瀏覽器只需用if(Sys.ie)或if(Sys.firefox)等形式,而判斷瀏覽器版本只需用if(Sys.ie == '8.0')或if(Sys.firefox == '3.0')等形式,表達起來還是非常優雅的。

前端框架項目已經啟動,一切就看過程和結果了...

武林網小編又為大家整理了幾個代碼:

復制代碼 代碼如下:

var Browser=new Object();
Browser.isMozilla=(typeof document.implementation!='undefined')&&(typeof document.implementation.createDocument!='undefined')&&(typeof HTMLDocument!='undefined');
Browser.isIE=window.ActiveXObject ? true : false;
Browser.isFirefox=(navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
Browser.isSafari=(navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
Browser.isOpera=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
function check(){
 alert(Browser.isIE?'ie':'not ie');
 alert(Browser.isFirefox?'Firefox':'not Firefox');
 alert(Browser.isSafari?'Safari':'not Safari');
 alert(Browser.isOpera?'Opera':'not Opera');
}
window.onload=check;

復制代碼 代碼如下:

function isBrowser(){
 var Sys={};
 var ua=navigator.userAgent.toLowerCase();
 var s;
 (s=ua.match(/msie ([/d.]+)/))?Sys.ie=s[1]:
 (s=ua.match(/firefox//([/d.]+)/))?Sys.firefox=s[1]:
 (s=ua.match(/chrome//([/d.]+)/))?Sys.chrome=s[1]:
 (s=ua.match(/opera.([/d.]+)/))?Sys.opera=s[1]:
 (s=ua.match(/version//([/d.]+).*safari/))?Sys.safari=s[1]:0;
 if(Sys.ie){//Js判斷為IE瀏覽器
  alert('//www.49028c.com'+Sys.ie);
  if(Sys.ie=='9.0'){//Js判斷為IE 9
  }else if(Sys.ie=='8.0'){//Js判斷為IE 8
  }else{
  }
 }
 if(Sys.firefox){//Js判斷為火狐(firefox)瀏覽器
  alert('//www.49028c.com'+Sys.firefox);
 }
 if(Sys.chrome){//Js判斷為谷歌chrome瀏覽器
  alert('//www.49028c.com'+Sys.chrome);
 }
 if(Sys.opera){//Js判斷為opera瀏覽器
  alert('//www.49028c.com'+Sys.opera);
 }
 if(Sys.safari){//Js判斷為蘋果safari瀏覽器
  alert('//www.49028c.com'+Sys.safari);
 }
}

分享一個通過jquery獲取瀏覽器類型和瀏覽器版本號的函數方法。具體jquery代碼如下:

復制代碼 代碼如下:

$(document).ready(function(){
 varbrow=$.browser;
 varbInfo="";
 if(brow.msie){bInfo="MicrosoftInternetExplorer"+brow.version;}
 if(brow.mozilla){bInfo="MozillaFirefox"+brow.version;}
 if(brow.safari){bInfo="AppleSafari"+brow.version;}
 if(brow.opera){bInfo="Opera"+brow.version;}
 alert(bInfo);
});

jQuery  從 1.9 版開始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 方法,如果需要了解 $.support 請參考:

jQuery 1.9使用$.support替代$.browser方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲奶大毛多的老太婆| 亚洲日本欧美日韩高观看| 亚洲美女视频网站| 国产免费一区二区三区在线观看| 日韩电影在线观看免费| 日韩欧美国产骚| 亚洲天堂av高清| 亚洲精品自拍视频| 亚洲bt天天射| 欧美日韩一区二区三区| 热门国产精品亚洲第一区在线| 国产精品久久久久久久美男| 亚洲精品国产精品国自产在线| 亚洲美女免费精品视频在线观看| 成人国产精品av| 日韩精品高清在线| 亚洲欧美在线第一页| 色老头一区二区三区| 裸体女人亚洲精品一区| 黑人巨大精品欧美一区二区一视频| 日韩av网址在线观看| 欧美壮男野外gaytube| 九九热r在线视频精品| 欧美激情亚洲综合一区| 国产成人鲁鲁免费视频a| 日韩欧美在线第一页| 亚洲一区二区三区毛片| 国产精品久久婷婷六月丁香| 国产精品网站大全| 97免费视频在线| 欧美一区二区大胆人体摄影专业网站| 日韩福利在线播放| 国内精久久久久久久久久人| 亚洲欧美综合区自拍另类| 国产大片精品免费永久看nba| 国语自产偷拍精品视频偷| 国产成人黄色av| 亚洲一区中文字幕在线观看| 这里只有精品视频| 久久亚洲精品中文字幕冲田杏梨| 久久色精品视频| 亚洲欧美色图片| 国产91热爆ts人妖在线| 久久久在线免费观看| 91久久国产精品91久久性色| 亚洲午夜女主播在线直播| 亚洲毛片在线免费观看| 国内精品久久久久| 美女视频久久黄| 欧美日韩aaaa| 国产黑人绿帽在线第一区| 91久久久亚洲精品| xvideos成人免费中文版| 亚洲精品国产精品国自产在线| 宅男66日本亚洲欧美视频| 国产免费一区二区三区在线观看| 久久久999精品| 亚洲第一精品福利| 精品精品国产国产自在线| 中文字幕亚洲欧美日韩在线不卡| 国产精品第一区| 国产在线视频2019最新视频| 国产精品激情av在线播放| 国产精品美腿一区在线看| 亚洲精品第一页| 欧美精品www在线观看| 日韩大陆毛片av| 亚洲一区美女视频在线观看免费| 亚洲第一福利网| 久久精品国亚洲| 国产欧美一区二区白浆黑人| 中文字幕亚洲欧美日韩2019| 91美女高潮出水| 成人妇女免费播放久久久| 久久av.com| 亚洲一区二区三区sesese| 久久精品欧美视频| 欧美美女15p| 色偷偷888欧美精品久久久| 中文字幕亚洲欧美日韩2019| 中文字幕在线看视频国产欧美| 国产精品久久久久久久久久尿| 日韩成人在线观看| 日韩免费观看高清| 日韩精品在线观看视频| 92看片淫黄大片欧美看国产片| 国产一区二区三区精品久久久| 日韩黄色高清视频| 欧美精品日韩www.p站| 青青草99啪国产免费| 欧美在线亚洲在线| 亚洲成人在线网| 欧美性xxxx在线播放| 久久久国产91| 综合欧美国产视频二区| 日韩一区二区在线视频| 国产精品美女无圣光视频| 日日狠狠久久偷偷四色综合免费| 日韩一级黄色av| 亚洲在线视频观看| 国产精品香蕉av| 久久久精品日本| 欧美成人在线免费视频| 一个人www欧美| 一区二区中文字幕| 亚洲高清免费观看高清完整版| 国语自产精品视频在线看抢先版图片| 欧美精品一区在线播放| 精品福利樱桃av导航| 国产精品吴梦梦| 国产亚洲精品久久久久动| 欧美激情一级精品国产| 亚洲国产精品va在线看黑人| 亚洲a在线播放| 中文字幕亚洲图片| 日本免费在线精品| 日韩av免费在线看| 国模极品一区二区三区| www.久久色.com| 久久久www成人免费精品| 91在线高清免费观看| 亚洲一区二区三区四区在线播放| 欧美一级高清免费| 91久久久久久久久久久久久| 亚洲人成在线观看网站高清| 日韩av在线播放资源| 亚洲人成在线观看| 日韩第一页在线| 91探花福利精品国产自产在线| 中文字幕欧美精品日韩中文字幕| 91久久国产精品91久久性色| 国产一区二区三区高清在线观看| 国产精品毛片a∨一区二区三区|国| 中文字幕亚洲欧美一区二区三区| 精品一区二区电影| 国产91成人video| 国产精品视频最多的网站| 精品国模在线视频| 亚洲综合色av| 一区二区亚洲精品国产| 国产精品久久久久久久久久三级| 美女精品久久久| 91免费的视频在线播放| 日韩欧美在线观看| 色综合视频一区中文字幕| 国产精品一区二区三| 色无极亚洲影院| 欧美日韩在线观看视频| 91在线观看欧美日韩| 精品福利樱桃av导航| 亚洲视频第一页| 欧美在线视频a| 日韩电影在线观看免费| 久久噜噜噜精品国产亚洲综合| 亚洲精品日韩av| 欧美乱大交xxxxx另类电影| 国产一区二区三区中文| 亚洲精品日韩丝袜精品| 日韩av大片免费看| 亚洲精品二三区| 欧美激情亚洲激情| 自拍偷拍亚洲区| www.欧美精品| 精品视频在线播放色网色视频|