天天看點

根據userAgent值的特性判斷用戶端裝置及浏覽器類型

[b]文章寫的太好了, 直接轉了

[/b] 原文連結:http://www.cnblogs.com/dowinning/archive/2011/07/22/2113981.html

前文《Web開發相容性系列文章(一):不同裝置浏覽器的userAgent值大全》羅列了常用電腦浏覽器及智能手機浏覽器的userAgent值

這裡對浏覽器各自的userAgent特點做一分析,并給出判斷方法:

Windows作業系統浏覽器系列:

IE浏覽器系列:

特征表現:均以 "mozilla/" 開頭,"msie x.0;" 中的x表示其版本;

判斷方法:粗略判斷可以隻檢索 "msie x.0;" 字元串即可,嚴格判斷可檢索 "mozilla/x.0 (compatibal; msie x.0; windows nt",不過一般沒有這個必要

Windows版Firefox:

特征表現:以"mozilla/x.0"開頭,包含"windows nt","gecko/"和"firefox/" ;

判斷方法:粗略判斷可以隻檢索 "firefox/"和"windows nt" 字元串,嚴格判斷可以檢索"mozilla/" ,"windows nt","gecko/"和"firefox/" 四個字元串;

Windows版Chrome:

特征表現: 以"mozilla/x.0"開頭,包含"windows nt","chrome/",同時包含"applewebkit/","safari/";

判斷方法:粗略判斷可以隻檢索 "windows nt"和"chrome/"字元串,嚴格判斷可以同時檢索 "mozilla/" ,"windows nt","applewebkit/","safari/","chrome/" 五個字元串;

Windows版Opera:

特征表現:以"opera/"開頭,含有"windows nt","presto/" 字元串;

判斷方法:粗略判斷隻檢索 "windows nt"和"opera/"字元串,嚴格判斷同時檢索 "opera/","windows nt" 和 "presto/";

Windows版Safari:

特征表現:以"mozilla/"開頭,同時含有"windows nt","applewebkit/","safari/";

判斷方法:粗略判斷可以檢索含有 "windows nt","safari/" 同時不包含 "chrome/",嚴格判斷需要同時含有"mozilla/","windows nt","applewebkit/","safari/"但是不包含"chrome/";

小結:Windows作業系統上的浏覽器userAgent均包含"windows nt"字元串來表征windows作業系統。

iPhone平台浏覽器系列:

iPhone自帶safari:

特征表現:以"mozilla/"開頭,含有"iphone"字元串,同時含有 "mobile/","safari/"字元串;

判斷方法:粗略判斷隻檢索 "iphone"和"safari/"字元串,嚴格判斷則要同時包含 "mozilla/","iphone","mobile/","safari/"四個字元串

iPhone版Opera Mobile:

特征表現: 以"opera/"開頭,含有"iphone"字元串,同時含有 "opera mini/","presto/"字元串;

判斷方法:粗略判斷隻檢索 "iphone"和"opera/"字元串,嚴格判斷則要同時包含 "opera/","iphone","opera mini/","presto/"四個字元串

小結:iPhone手機上的浏覽器userAgent均包含"iphone"字元串

Android平台浏覽器系列:

Android自帶浏覽器(有人說其實是就chrome,但google自己未做表示,且還在開發一個Android上運作的Chrome to Phone):

特征表現: 以"mozilla/"開頭,含有"android"和"linux" 字元串,同時含有 "applewebkit/","mobile safari/"字元串;

判斷方法:因為還不知道Android上未來會不會有獨立的safari(估計不會了),是以建議直接嚴格判斷,檢索 "mozilla/","android","linux","applewebkit/","mobile safari/"五個字元串

Android版Opera Mobile:

特征表現: 以"opera/"開頭,含有"android"和"linux" 字元串,同時含有 "opera mobi/","presto/"字元串;

判斷方法:粗略判斷隻檢索 "android"和"opera/",嚴格判斷則要同時包含"opera/","android","linux","opera mobi/","presto/"五個字元串

Android版Firefox:

特征表現:以"mozilla/"開頭,含有"android"和"linux" 字元串,同時含有 "firefox/","gecko/","fennec/"字元串;

判斷方法:粗略判斷隻檢索 "android"和"firefox/",嚴格判斷則要同時包含"mozilla/","android","linux","firefox/","gecko/","fennec/"六個字元串

小結:Android平台上的浏覽器userAgent均包含"android"和"linux"字元串

以上對windows、iphone、android三大平台的主流浏覽器解析就基本結束了,其他平台的linux估計至少與android平台應該類似,而采用了Mac OS的iPad和麥金塔應該與iphone平台類似,故而暫時先不做解析,也因為手頭沒有那麼多裝置和作業系統來測試,希望日後能夠補上。

現在的網站産品開發要求跟以前又不一樣了,因為不僅要滿足電腦浏覽,還需要滿足使用者通過智能手機(這裡僅指iphone、android、windows phone等真正的智能手機,blackberry和palm這樣的小衆半智能系統暫時不考慮,至于symbian這個僞智能系統就一邊玩去吧)通過以上三個具有代表性的平台,也大緻可以推測出根據浏覽器userAgent判斷使用者裝置的解決方案了。

1、如果需要判斷作業系統,方法比較簡單,在userAgent裡面檢索以下字元串:

含有"windows nt":顯而易見了,windows作業系統,nt後面的版本号可以判斷OS版本;

含有"mac":蘋果的Mac OS X或者其他Mac OS核心的系統;

含有"iphone":蘋果iphone手機專有的,一般情況下也應該含有"mac";

含有"ipad":蘋果iPad平闆電腦(資料表明iPad的浏覽器userAgent同時含有"mac","iphone","ipad");

含有"linux":Linux作業系統或者其他以linux作為核心的作業系統;

含有"android":谷歌的Android作業系統,有可能是智能手機,也有可能是安卓版的平闆電腦哦,一般情況下android平台上的userAgent也應該包含"linux";

含有"unix","sunos","bsd"三者之一:Unix系統,其實對這個系統的使用者體驗問題,目前幾乎可以不用考慮了;

含有"ubuntu":ubuntu定制版的linux

……

你也看到了,判斷作業系統及其版本其實并不一直有用,但總有能用到的地方,比如開發專門針對iphone、ipad、android等裝置螢幕分辨率的頁面

2、判斷浏覽器的核心,方法也不困難,我自己琢磨出來的,不一定都對啊:

IE(Trident)核心(IE for Mac, IEs4Linux之類的就不用說了,隻考慮windows下的):以"mozilla/"開頭,含有"windows nt"和"msie"字元串;

Firefox(Gecko)核心:以"mozilla/"開頭,含有"firefox/"和"gecko/"字元串的就是啦,其中Android版的還帶有"fennec/"字元串;

Opera()核心:以"opera/"開頭,含有"presto/"字元串,其中iphone版還帶有"opera mini/",Android版也帶有"opera mobi/";

Webkit核心:以"mozilla/"開頭,含有"applewebkit/"和"safari/"字元串,其中帶有"chrome/"的就是Chrome浏覽器,不帶的就是Safari或其他;

以上就是主要的浏覽器核心了

浏覽器核心才是解決相容性的關鍵問題所在,然而,這個相容性問題已經有jQuery和Extjs等架構幫你解決了,是以這個判斷隻針對個别頁面的CSS樣式在不同核心渲染效果不同的情況下使用,當然了,同樣的核心在智能手機和電腦等不同裝置上渲染結果也不同,這一點也需要注意。

3、判斷浏覽器useAgent的實際應用舉例:

不同浏覽器核心對頁面的渲染效果不同,雖然已經有jQuery和Extjs等為我們做了相容處理,但是依然會有一些細小的差别需要我們單獨處理,此時需要判斷浏覽器核心;

使用者并不僅僅是通過電腦通路網站的,随着智能手機的日益普及還有平闆電腦的大行其道,使用這兩者來上網的比例越來越高,怎麼辦?平闆電腦還好,螢幕大分辨率高,智能手機受限于他的螢幕尺寸和分辨率,雖有強勁的處理能力,也可以完美支援現有的網站,但是為客戶多考慮一點總沒有壞處你說對吧?畢竟通過局部縮放拖拽的方式看網頁很不舒服,這時呢,我們就可以專門為iphone、android這樣的窄條螢幕提供一個專用版本來布局了,一來提升浏覽體驗,二來降低網絡流量,加快通路速度;

做訪客流量分析,通過判斷客戶浏覽器類型并記錄其數量,來優化設計自己的網站,以分别提升其客戶體驗

……

繼續閱讀