成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS 獲得瀏覽器類型和版本

Tangpj / 621人閱讀

摘要:獲取瀏覽器類型和版本介紹完瀏覽器的信息,下面就是寫正則來判斷了根據(jù)關(guān)系進行判斷從關(guān)系判斷中,我們會發(fā)現(xiàn)判斷的順序很重要,原因是很多瀏覽器都是多核的。參考判斷瀏覽器的方法總結(jié)判斷瀏覽器類型及版本新增判斷瀏覽器類型的方法總結(jié)歡迎訪問我的博客。

最近碰到了一個問題,判斷瀏覽器的類型,我們熟知的 IE, Firefox, Opera, Safari, Chrome 五款比較有名的瀏覽器,有時候需要考慮兼容性問題,當然,即使是同一款瀏覽器,不同的 version 也會帶來很多麻煩。

在 Chrome 沒有出來之前,IE 一直都是瀏覽器行業(yè)的領(lǐng)袖和標準,但是 IE 的難用簡直了。Chrome 的核心是 Webkit,它開源了一套瀏覽器引擎 chromium,然后現(xiàn)在好多瀏覽器都采用多核,這給判斷瀏覽器的類型帶來不少麻煩。

js 判斷瀏覽器的類型,使用的是 JavaScript Navigator 對象的,說白了還是通過正則表達式去匹配字段。當然這里也有很多大牛總結(jié)的經(jīng)驗,傳送門1,傳送門2,傳送門3。

各大瀏覽器的 userAgent 值

首先需要知道 navigator 接口對象的值表示哪些意思,Navigator MDN。

作為一個前端,常備各種瀏覽器,用來調(diào)試瀏覽器的兼容。下面是各大瀏覽器輸出 navigator.userAgent 的值:

IE 8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)

IE 11:Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko

win EDGE:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240

FireFox:Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0

Chrome:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36

Opera:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56

Safari:mozilla/5.0 (windows; u; windows nt 5.1; zh-cn) applewebkit/533.16 (khtml, like gecko) version/5.0 safari/533.16

360安全瀏覽器:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36

QQ瀏覽器:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.1708.400 QQBrowser/9.5.9635.400

IE 11 版本比之前版本的 userAgent 發(fā)生很大的變化,你現(xiàn)在從網(wǎng)上搜的話,發(fā)現(xiàn)很多代碼都無法支持 ie 11 的判斷,上限是 ie 10。

下面針對列表中的瀏覽器,總結(jié)了一下:

IE 10 之前的版本,匹配關(guān)鍵字 MSIE 8.0

IE 11 要通過 rv:11.0) like Gecko 來匹配;

EDGE 通過 Edge/12.10240;

Firefox 通過 Firefox/49.0;

Chrome 通過 Chrome/54.0.2840.71,但是會發(fā)現(xiàn),后面的瀏覽器都是基于 Chrome 內(nèi)核(safari 除外),但是 Chrome 又是基于 safari 內(nèi)核的。。

Opera 通過 OPR/41.0.2353.56,但是網(wǎng)上普遍是通過 opera 字段,我這款瀏覽器沒有 opera 字段,難道是盜版?

Safari 通過 safari/533.16 來匹配;

360 和 QQ 都是基于 Chrome 內(nèi)核的,當然 QQ 還能通過 QQBrowser/9.5.9635.400,如果你高興去匹配的話。

獲取瀏覽器類型和版本

介紹完瀏覽器的 userAgent 信息,下面就是寫正則來判斷了:

function getExplore(){
  var Sys = {};  
  var ua = navigator.userAgent.toLowerCase();  
  var s;  
  (s = ua.match(/rv:([d.]+)) like gecko/)) ? Sys.ie = s[1] :
  (s = ua.match(/msie ([d.]+)/)) ? Sys.ie = s[1] :  
  (s = ua.match(/edge/([d.]+)/)) ? Sys.edge = s[1] :
  (s = ua.match(/firefox/([d.]+)/)) ? Sys.firefox = s[1] :  
  (s = ua.match(/(?:opera|opr).([d.]+)/)) ? Sys.opera = s[1] :  
  (s = ua.match(/chrome/([d.]+)/)) ? Sys.chrome = s[1] :  
  (s = ua.match(/version/([d.]+).*safari/)) ? Sys.safari = s[1] : 0;  
  // 根據(jù)關(guān)系進行判斷
  if (Sys.ie) return ("IE: " + Sys.ie);  
  if (Sys.edge) return ("EDGE: " + Sys.edge);
  if (Sys.firefox) return ("Firefox: " + Sys.firefox);  
  if (Sys.chrome) return ("Chrome: " + Sys.chrome);  
  if (Sys.opera) return ("Opera: " + Sys.opera);  
  if (Sys.safari) return ("Safari: " + Sys.safari);
  return "Unkonwn";
}

從關(guān)系判斷中,我們會發(fā)現(xiàn)判斷的順序很重要,原因是很多瀏覽器都是多核的。

如果只是簡單判斷瀏覽器類型,不需要知道版本號,還可以通過下面的方法(此方法也可以用正則改成匹配版本號):

function getExploreName(){
  var userAgent = navigator.userAgent;
  if(userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1){
    return "Opera";
  }else if(userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1){
    return "IE";
  }else if(userAgent.indexOf("Edge") > -1){
    return "Edge";
  }else if(userAgent.indexOf("Firefox") > -1){
    return "Firefox";
  }else if(userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1){
    return "Safari";
  }else if(userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1){
    return "Chrome";
  }else if(!!window.ActiveXObject || "ActiveXObject" in window){
    return "IE>=11";
  }else{
    return "Unkonwn";
  }
}

同樣,判斷順序很重要

window 用戶可以通過修改注冊表來更改 userAgent 內(nèi)容,會對判斷造成影響,不知道還有沒有其他的更好的方法來判斷。

一些其他手段

如果只是單單判斷是否是 IE 瀏覽器,那就好辦了,可以通過一些特有函數(shù)來判斷。

比如 window.attachEvent 在 IE<=10 是有定義的,其他瀏覽器是 underfined。

if(window.attachEvent){
  console.log("IE <= 10");
}else{
  console.log("not IE or IE >=11");
}
總結(jié)

最近在弄一個非常有意思的煙花特效,基于 canvas,但是有一個非常嚴重的問題是在 Chrome 內(nèi)核的瀏覽器下運行很流暢,在 Firefox 或 Safari 下面就很卡,IE 下面也是慘不忍睹,這讓我對 Chrome 又有了一個新的認識。項目地址,DEMO 地址。

參考

js/jquery判斷瀏覽器的方法總結(jié)
JavaScript判斷瀏覽器類型及版本(新增IE11)
JS判斷瀏覽器類型的方法總結(jié)

歡迎訪問我的博客。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91168.html

相關(guān)文章

  • JavaScript DOM節(jié)點簡介

    摘要:如果傳遞的參數(shù)是,將遞歸復制當前節(jié)點的所有子孫節(jié)點。的話只復制當前節(jié)點。設(shè)置內(nèi)容時,能將里面的標簽渲染成正常的標簽。 DOM由節(jié)點組成 在 HTML DOM (文檔對象模型)中,每個部分都是節(jié)點:文檔本身是文檔節(jié)點所有 HTML 元素是元素節(jié)點所有 HTML 屬性是屬性節(jié)點HTML 元素內(nèi)的文本是文本節(jié)點注釋是注釋節(jié)點 1.重要節(jié)點類型:標簽(元素)節(jié)點,屬性節(jié)點,文本節(jié)點。 2.重要...

    silvertheo 評論0 收藏0
  • JavaScript DOM節(jié)點簡介

    摘要:如果傳遞的參數(shù)是,將遞歸復制當前節(jié)點的所有子孫節(jié)點。的話只復制當前節(jié)點。設(shè)置內(nèi)容時,能將里面的標簽渲染成正常的標簽。 DOM由節(jié)點組成 在 HTML DOM (文檔對象模型)中,每個部分都是節(jié)點:文檔本身是文檔節(jié)點所有 HTML 元素是元素節(jié)點所有 HTML 屬性是屬性節(jié)點HTML 元素內(nèi)的文本是文本節(jié)點注釋是注釋節(jié)點 1.重要節(jié)點類型:標簽(元素)節(jié)點,屬性節(jié)點,文本節(jié)點。 2.重要...

    impig33 評論0 收藏0
  • js獲取剪切板內(nèi)容,js控制圖片粘貼。

    摘要:在用戶執(zhí)行粘貼操作的時候,能夠獲得剪切板的內(nèi)容,本文討論一下這個問題。目前只有支持獲取剪切板中的圖片數(shù)據(jù)。這么多的判斷條件,基本可以確定通過剪切板過來的是粘貼的文件。 在用戶執(zhí)行粘貼操作的時候,js能夠獲得剪切板的內(nèi)容,本文討論一下這個問題。 目前只有Chrome支持獲取剪切板中的圖片數(shù)據(jù)。還好需要這個功能的產(chǎn)品目前只支持Chrome和Safari,一些Chrome的新特性是可以盡情使...

    KaltZK 評論0 收藏0
  • 最近遇到的前端面試題(2017.03.08更新版)

    摘要:通過管理組件通信通過驅(qū)動視圖比較差異進行更新操作作者第七頁鏈接來源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)。達到無刷新的效果。對象的狀態(tài)不受外界影響。對象代表一個異步操作,有三種狀態(tài)進行中已完成,又稱和已失敗。 以下問題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗整理后覺得更容易理解的解釋版本,歡迎補充。 一. 輸入url后的加載過程 從輸入 URL 到頁面加載完成的過程中都發(fā)生了什么 計算機...

    linkFly 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<