国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 客戶端檢測——“用戶代理檢測”的注意要點

instein / 2497人閱讀

摘要:用戶代理檢測通過的屬性訪問。在服務器端,通過檢測用戶代理字符串來確定用戶使用的瀏覽器是一種常用的做法但在客戶端,用戶代理檢測一般為最低優先級。目前只要檢測五大呈現引擎即可和。

用戶代理檢測

通過 JavaScript 的 navigator.userAgent 屬性訪問。在服務器端,通過檢測用戶代理字符串來確定用戶使用的瀏覽器是一種常用的做法;但在客戶端,用戶代理檢測一般為最低優先級。

用戶代理字符串檢測技術

首先要確定你需要多么具體的瀏覽器信息。然后在使用代碼進行檢測。

識別呈現引擎 原理

確切知道瀏覽器的名字和版本號不如確切知道它實用的是什么呈現引擎。目前只要檢測五大呈現引擎即可:IE、Gecko、WebKit、KHTML 和 Opera。(為了不在全局作用域中添加多余的變量,我們將使用模塊增強模式來封裝檢測腳本。)基本代碼如下:

var client = function(){

    var engine = {
        
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,
        
        ver: null //完整的版本
    };
    
    return {
        engine: engine
    };
}();

做這樣的區分可以支持像下面這樣編寫的代碼:

if(client.engine.ie){
    //針對 IE 的代碼
}else if (client.engine.gecko > 0){
    if (client.engine.ver == "1.8.1"){
        //針對這個版本執行某些操作
    }
}
檢測順序

關鍵是檢測順序要正確。由于用戶代理字符串存在很多不一致的地方,如果檢測順序不對,很可能導致檢測結果不正確。

第一步要識別 Opera:

if (window.opera){
    engine.ver = window.opera.version();
    engine.opera = parseFloat(engine.ver);
}    

第二步是 WebKit (檢測字符串中的“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);
}
正則表達式

各正則表達式如下:

(useragentstring.com這里列出了各種瀏覽器的版本以及用戶代理字符串。)

opera:
不需要正則表達式,使用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.36
KHTML:

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)

對于第一種:

KHTML/(S+) //KHTML/4.9.1
Konqueror/(S+) //Konqueror/4.9

對于第二種:

KHTML/(S+) //KHTML/4.5.4
Konqueror/([^;]+) //Konqueror/4.5
Gecko:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1

rv:([^)]+)) Gecko/d{8} //rv:40.0) Gecko/20100101
IE:

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

對于第一種:

MSIE ([^,]+) //MSIE 11

對于第二種:

MSIE ([^;]+) //MSIE 10.6
識別瀏覽器

繼續完善該代碼:

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
    };
}();

由于大多數瀏覽器與其呈現引擎密切相關,所以下面示例中檢測瀏覽器的代碼與檢測呈現引擎的代碼是混合在一起的。

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{
        
        //近似的確定版本號
        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);
}
識別平臺

識別Windows操作系統

識別移動設備

識別游戲系統

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78259.html

相關文章

  • JavaScript高級程序設計》筆記:戶端檢測(九)

    摘要:由于怪癖檢測無法精確地檢測特定的瀏覽器和版本。用戶代理檢測需要特殊的技巧,特別是要注意會隱瞞其用戶代理字符串的情況。而在客戶端,用戶代理檢測一般被當作一種萬不得已的做法,其優先級排在能力檢測和怪癖檢測之后。 能力檢測 在編寫代碼之前先檢測特定瀏覽器的能力。例如,腳本在調用某個函數之前,可能要先檢測該函數首付存在。這種檢測方法將開發人員從考慮具體的瀏覽器類型和版本中解放出來,讓他們把注意...

    aaron 評論0 收藏0
  • JavaScript 戶端檢測(高程三)

    摘要:客戶端檢測方式能力檢測怪癖檢測用戶代理檢測能力檢測最常用也是最為人們廣泛接受的客戶端檢測形式是能力檢測又稱特性檢測。在可能的情況下,盡量使用進行能力檢測。 客戶端檢測方式 能力檢測 怪癖檢測 用戶代理檢測 能力檢測 最常用也是最為人們廣泛接受的客戶端檢測形式是能力檢測(又稱特性檢測)。能力檢測的目標不是識別特定的瀏覽器,而是識別瀏覽器的能力。采用這種方式不必顧及特定的瀏覽器如何...

    msup 評論0 收藏0
  • JavaScript高級程序設計》(第3版)讀書筆記 第9章 戶端檢測

    摘要:用戶代理檢測用戶代理檢測是爭議最大的客戶端檢測技術。第二個要檢測是。由于實際的版本號可能會包含數字小數點和字母,所以捕獲組中使用了表示非空格的特殊字符。版本號不在后面,而是在后面。除了知道設備,最好還能知道的版本號。 檢測Web客戶端的手段很多,各有利弊,但不到萬不得已就不要使用客戶端檢測。只要能找到更通用的方法,就應該優先采用更通用的方法。一言蔽之,先設計最通用的方案,然后再使用特定...

    ispring 評論0 收藏0
  • JavaScript戶端檢測

    摘要:前言檢測客戶端的手段很多,并且各有利弊,但不到萬不得已,不要使用客戶端檢測,只要能找到更通用的方法,就優先使用更通用的方法。用戶代理檢測在每一次請求過程中,用戶代理字符串是作為響應首部發送的,并且該字符串能被的訪問。 前言:檢測Web客戶端的手段很多,并且各有利弊,但不到萬不得已,不要使用客戶端檢測,只要能找到更通用的方法,就優先使用更通用的方法。 1 能力檢測 能力檢測的目標不是識...

    YacaToy 評論0 收藏0
  • JavaScript戶端檢測

    摘要:博文模塊增強模式進行客戶端檢測標簽博文常用的檢測方式為能力檢測用戶代理檢測這里有用戶代理檢測檢測插件非瀏覽器是一個包含瀏覽器插件的數組這個數組的每一項都包含插件的名字插件的描述插件的文件名插件所處理的類型數量檢測插件在中無效方法用于把字符串 [博文]模塊增強模式進行客戶端檢測 標簽: 博文 常用的檢測方式為: [ ] 1 . 能力檢測 [ ] 2 . 用戶代理檢測 這里有 2 ...

    KnewOne 評論0 收藏0

發表評論

0條評論

instein

|高級講師

TA的文章

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