摘要:用戶代理檢測(cè)通過(guò)的屬性訪問(wèn)。在服務(wù)器端,通過(guò)檢測(cè)用戶代理字符串來(lái)確定用戶使用的瀏覽器是一種常用的做法但在客戶端,用戶代理檢測(cè)一般為最低優(yōu)先級(jí)。目前只要檢測(cè)五大呈現(xiàn)引擎即可和。
用戶代理檢測(cè)
通過(guò) JavaScript 的 navigator.userAgent 屬性訪問(wèn)。在服務(wù)器端,通過(guò)檢測(cè)用戶代理字符串來(lái)確定用戶使用的瀏覽器是一種常用的做法;但在客戶端,用戶代理檢測(cè)一般為最低優(yōu)先級(jí)。
用戶代理字符串檢測(cè)技術(shù)首先要確定你需要多么具體的瀏覽器信息。然后在使用代碼進(jìn)行檢測(cè)。
識(shí)別呈現(xiàn)引擎 原理確切知道瀏覽器的名字和版本號(hào)不如確切知道它實(shí)用的是什么呈現(xiàn)引擎。目前只要檢測(cè)五大呈現(xiàn)引擎即可:IE、Gecko、WebKit、KHTML 和 Opera。(為了不在全局作用域中添加多余的變量,我們將使用模塊增強(qiáng)模式來(lái)封裝檢測(cè)腳本。)基本代碼如下:
var client = function(){ var engine = { ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, ver: null //完整的版本 }; return { engine: engine }; }();
做這樣的區(qū)分可以支持像下面這樣編寫(xiě)的代碼:
if(client.engine.ie){ //針對(duì) IE 的代碼 }else if (client.engine.gecko > 0){ if (client.engine.ver == "1.8.1"){ //針對(duì)這個(gè)版本執(zhí)行某些操作 } }檢測(cè)順序
關(guān)鍵是檢測(cè)順序要正確。由于用戶代理字符串存在很多不一致的地方,如果檢測(cè)順序不對(duì),很可能導(dǎo)致檢測(cè)結(jié)果不正確。
第一步要識(shí)別 Opera:
if (window.opera){ engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }
第二步是 WebKit (檢測(cè)字符串中的“AppleWebKit”):
var ua = navigator.userAgent; if (window.opera){ engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }else if (/AppleWebKit/(S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); }
第三步是 KHTML:
var ua = navigator.userAgent; if (window.opera){ engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }else if (/AppleWebKit/(S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); }else if (/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.khtml = parseFloat(engine.ver); }
第四步是 Gecko:
var ua = navigator.userAgent; if (window.opera){ engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }else if (/AppleWebKit/(S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); }else if (/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.khtml = parseFloat(engine.ver); }else if (/rv:([^)]+)) Gecko/d{8}/.test(ua)){ engine.ver = RegExp["$1"]; engine.gecko = parseFloat(engine.ver); }
第五步是 IE:
var ua = navigator.userAgent; if (window.opera){ engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }else if (/AppleWebKit/(S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); }else if (/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.khtml = parseFloat(engine.ver); }else if (/rv:([^)]+)) Gecko/d{8}/.test(ua)){ engine.ver = RegExp["$1"]; engine.gecko = parseFloat(engine.ver); }else if (/MSIE ([^;]+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.ie = parseFloat(engine.ver); }正則表達(dá)式
各正則表達(dá)式如下:
(useragentstring.com這里列出了各種瀏覽器的版本以及用戶代理字符串。)
opera:不需要正則表達(dá)式,使用window.opera.verson();Webkit:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
AppleWebKit/(S+) //AppleWebKit/537.36KHTML:
Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9
Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)
對(duì)于第一種:
KHTML/(S+) //KHTML/4.9.1 Konqueror/(S+) //Konqueror/4.9
對(duì)于第二種:
KHTML/(S+) //KHTML/4.5.4 Konqueror/([^;]+) //Konqueror/4.5Gecko:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
rv:([^)]+)) Gecko/d{8} //rv:40.0) Gecko/20100101IE:
Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0
對(duì)于第一種:
MSIE ([^,]+) //MSIE 11
對(duì)于第二種:
MSIE ([^;]+) //MSIE 10.6識(shí)別瀏覽器
繼續(xù)完善該代碼:
var client = function(){ var engine = { ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, ver: null //完整的版本 }; var browser = { ie: 0, firefox: 0, safari: 0, konq: 0, opera: 0, chrome: 0, ver: null }; return { engine: engine }; }();
由于大多數(shù)瀏覽器與其呈現(xiàn)引擎密切相關(guān),所以下面示例中檢測(cè)瀏覽器的代碼與檢測(cè)呈現(xiàn)引擎的代碼是混合在一起的。
var ua = navigator.userAgent; if (window.opera){ engine.ver = browser.ver = window.opera.version(); engine.opera = browser.opera = parseFloat(engine.ver); }else if (/AppleWebKit/(S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); //確定是Chrome還是Safari if (/Chrome/(S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.chrome = parseInt(browser.ver); }else if(/Version/(S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.safari = parseInt(browser.ver); }else{ //近似的確定版本號(hào) var safariVersion = 1; if (engine.webkit < 100){ safariVersion = 1; }else if (engine.webkit < 312){ safariVersion = 1.2; }else if (engine.webkit < 412){ safariVersion = 1.3; }else { safariVersion = 2; } browser.safari = browser.ver = safariVersion; } }else if (/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ engine.ver = browser.ver = RegExp["$1"]; engine.khtml = browser.konq = parseFloat(engine.ver); }else if (/rv:([^)]+)) Gecko/d{8}/.test(ua)){ engine.ver = RegExp["$1"]; engine.gecko = parseFloat(engine.ver); //確定不是firefox if(/Firefox/(S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.firefox = parseFloat(browser.ver); } }else if (/MSIE ([^;]+)/.test(ua)){ engine.ver = browser.ver = RegExp["$1"]; engine.ie = browser.ie = parseFloat(engine.ver); }識(shí)別平臺(tái)
略
識(shí)別Windows操作系統(tǒng)略
識(shí)別移動(dòng)設(shè)備略
識(shí)別游戲系統(tǒng)略
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78259.html
摘要:由于怪癖檢測(cè)無(wú)法精確地檢測(cè)特定的瀏覽器和版本。用戶代理檢測(cè)需要特殊的技巧,特別是要注意會(huì)隱瞞其用戶代理字符串的情況。而在客戶端,用戶代理檢測(cè)一般被當(dāng)作一種萬(wàn)不得已的做法,其優(yōu)先級(jí)排在能力檢測(cè)和怪癖檢測(cè)之后。 能力檢測(cè) 在編寫(xiě)代碼之前先檢測(cè)特定瀏覽器的能力。例如,腳本在調(diào)用某個(gè)函數(shù)之前,可能要先檢測(cè)該函數(shù)首付存在。這種檢測(cè)方法將開(kāi)發(fā)人員從考慮具體的瀏覽器類型和版本中解放出來(lái),讓他們把注意...
摘要:客戶端檢測(cè)方式能力檢測(cè)怪癖檢測(cè)用戶代理檢測(cè)能力檢測(cè)最常用也是最為人們廣泛接受的客戶端檢測(cè)形式是能力檢測(cè)又稱特性檢測(cè)。在可能的情況下,盡量使用進(jìn)行能力檢測(cè)。 客戶端檢測(cè)方式 能力檢測(cè) 怪癖檢測(cè) 用戶代理檢測(cè) 能力檢測(cè) 最常用也是最為人們廣泛接受的客戶端檢測(cè)形式是能力檢測(cè)(又稱特性檢測(cè))。能力檢測(cè)的目標(biāo)不是識(shí)別特定的瀏覽器,而是識(shí)別瀏覽器的能力。采用這種方式不必顧及特定的瀏覽器如何...
摘要:用戶代理檢測(cè)用戶代理檢測(cè)是爭(zhēng)議最大的客戶端檢測(cè)技術(shù)。第二個(gè)要檢測(cè)是。由于實(shí)際的版本號(hào)可能會(huì)包含數(shù)字小數(shù)點(diǎn)和字母,所以捕獲組中使用了表示非空格的特殊字符。版本號(hào)不在后面,而是在后面。除了知道設(shè)備,最好還能知道的版本號(hào)。 檢測(cè)Web客戶端的手段很多,各有利弊,但不到萬(wàn)不得已就不要使用客戶端檢測(cè)。只要能找到更通用的方法,就應(yīng)該優(yōu)先采用更通用的方法。一言蔽之,先設(shè)計(jì)最通用的方案,然后再使用特定...
摘要:前言檢測(cè)客戶端的手段很多,并且各有利弊,但不到萬(wàn)不得已,不要使用客戶端檢測(cè),只要能找到更通用的方法,就優(yōu)先使用更通用的方法。用戶代理檢測(cè)在每一次請(qǐng)求過(guò)程中,用戶代理字符串是作為響應(yīng)首部發(fā)送的,并且該字符串能被的訪問(wèn)。 前言:檢測(cè)Web客戶端的手段很多,并且各有利弊,但不到萬(wàn)不得已,不要使用客戶端檢測(cè),只要能找到更通用的方法,就優(yōu)先使用更通用的方法。 1 能力檢測(cè) 能力檢測(cè)的目標(biāo)不是識(shí)...
摘要:博文模塊增強(qiáng)模式進(jìn)行客戶端檢測(cè)標(biāo)簽博文常用的檢測(cè)方式為能力檢測(cè)用戶代理檢測(cè)這里有用戶代理檢測(cè)檢測(cè)插件非瀏覽器是一個(gè)包含瀏覽器插件的數(shù)組這個(gè)數(shù)組的每一項(xiàng)都包含插件的名字插件的描述插件的文件名插件所處理的類型數(shù)量檢測(cè)插件在中無(wú)效方法用于把字符串 [博文]模塊增強(qiáng)模式進(jìn)行客戶端檢測(cè) 標(biāo)簽: 博文 常用的檢測(cè)方式為: [ ] 1 . 能力檢測(cè) [ ] 2 . 用戶代理檢測(cè) 這里有 2 ...
閱讀 2109·2021-11-15 11:39
閱讀 3282·2021-10-09 09:41
閱讀 1561·2019-08-30 14:20
閱讀 3364·2019-08-30 13:53
閱讀 3378·2019-08-29 16:32
閱讀 3511·2019-08-29 11:20
閱讀 3083·2019-08-26 13:53
閱讀 833·2019-08-26 12:18