? ? ? ?在項目開發(fā)中贺待,會經常性遇到兼容性問題转质,而在這個時候涧狮,我們迫切的希望能夠立即知道到底是哪個瀏覽器的哪個版本出了問題酪碘,以便于及時修正朋譬,所以需要在項目中添加客戶端瀏覽器嗅探代碼。經過查閱資料兴垦,并對比了各個瀏覽器下的userAgent信息徙赢。
1、 userAgent
? ? ? ?通過對比userAgent探越,可以發(fā)現: 一般情況下狡赐,無論是原生內核瀏覽器還是殼牌瀏覽器,一般都會在瀏覽器中添加自己的瀏覽器名稱和版本號標識钦幔,這個時候我們基本上能夠確定用戶所使用的瀏覽器的名稱枕屉、版本號、內核鲤氢、操作系統名稱及版本搀擂、平臺位數等諸多信息西潘。甚至在有些手機上,甚至可以獲取到手機的型號和版本哨颂。
? ? ? ?由于殼牌瀏覽器一般是在保留原生內核信息的基礎上添加自己的獨特標識信息喷市,因此確定殼牌瀏覽器的名稱是非常方便的。同樣因為這個原因威恼,判斷原生瀏覽器的名稱便稍微麻煩一些品姓。最麻煩的是收集各個瀏覽器下的ua信息。
? ? ? ?這里以Oprea瀏覽器(50.0.2762版本)為例箫措,說說userAgent字符串中一些關鍵字所代表的含義:
? ? (1)Mozilla/5.0:表示兼容或假裝兼容早已不存在的Mozilla瀏覽器缭黔。目前所有的瀏覽器都擁有該標識,對于瀏覽器嗅探沒有任何幫助蒂破;
? ? (2)Windows NT 10.0:表示操作系統名稱及版本馏谨,Windows NT 10.0即表示Windows10系統;
? ? (3)WOW64:表示操作系統位數為64為操作系統附迷;
? ? (4)AppleWebKit/537.36 (KHTML, like Gecko): 這一串表示使用的內核是Webkit537.36版本為基礎的惧互,同時假裝自己兼容Gecko,而渲染引擎是KHTML喇伯;
? ? (5)Chrome/63.0.3239.132: 表示的是瀏覽器的名稱和版本號喊儡,如果是原生內核瀏覽器,這就是瀏覽器的名稱和版本號稻据;
? ? (6)Safari/537.36: 表示以Safari/537.36版本為基礎進行開發(fā)的艾猜。
? ? (7)OPR/50.0.2762.67: 表示Oprea瀏覽器的名稱和版本。如果是殼牌瀏覽器捻悯,這就是瀏覽器的名稱和版本號匆赃,而這樣的方式一般就是殼牌瀏覽器所采用的ua標識策略。
? ? ? ?警告:鑒于現代瀏覽器的ua信息可以隨意更改變換今缚,所以通過ua信息獲取到的所有信息均無法保證所獲取的信息的真實性算柳。
2、內核
? ? ? ?書寫本文章的時候(2018.01)姓言,市場上主流的瀏覽器內核分為Trident瞬项、Gecko、Webkit何荚、Blink囱淋、Edge、Presto(已廢棄)餐塘。
? ? ? ?Trident內核主要用于Internet Exporer瀏覽器妥衣;Gecko主要用于FireFox瀏覽器;Webkit主要是Safari、舊版Chrome(<28之前的版本)称鳞;Blink內核主要是現在的Chrome涮较、Oprea(>15之后的版本)瀏覽器稠鼻;Edge內核主要是Microsoft Edge瀏覽器冈止;Presto主要用于舊版Oprea瀏覽器。
? ? ? ?通過觀察候齿,我們完全能夠根據userAgent中包含的內核信息熙暴,判斷出來用戶使用的瀏覽器的內核及版本。而這些對于兼容性調試來說慌盯,基本上足夠了周霉。
3、userAgent 信息網站網址收錄
Web User Agents Database:?http://www.webuseragents.com/
fynas實用小工具-手機userAgent庫:http://www.fynas.com/ua
User Agent String.Com:?http://www.useragentstring.com/
Who is Hosting this:?https://www.whoishostingthis.com/tools/user-agent/