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

資訊專(zhuān)欄INFORMATION COLUMN

客戶端檢測(cè)之用戶代理檢測(cè) — navigator.userAgent

luck / 1228人閱讀

摘要:檢測(cè)腳本的基本代碼結(jié)構(gòu)如下所示呈現(xiàn)引擎具體的版本號(hào)檢測(cè)呈現(xiàn)引擎全局變量,用于保存相關(guān)信息。如果檢測(cè)到了哪個(gè)呈現(xiàn)引擎,那么就以浮點(diǎn)數(shù)值形式將該引擎的版本號(hào)寫(xiě)入相應(yīng)的屬性。

前言

前端這東西,各種先有事實(shí)后有標(biāo)準(zhǔn)。不管是各大瀏覽器老哥各自為政,還是w3c姍姍來(lái)遲,既有事實(shí)標(biāo)準(zhǔn)難以更改。雖說(shuō)多方割據(jù),互相競(jìng)爭(zhēng),總比一家獨(dú)大,愛(ài)更不更來(lái)得好。但卻苦了我們這些平頭小碼農(nóng)?,頸椎病又加深了啊。
之前閱讀了《JavaScript高級(jí)程序設(shè)計(jì)》,今日準(zhǔn)備將其用戶代理檢測(cè)源碼部分做個(gè)歸納。
槽不多吐,開(kāi)始正文!
博文地址:客戶端檢測(cè)之用戶代理檢測(cè) — navigator.userAgent

1.客戶端檢測(cè)

面對(duì)各瀏覽器普遍存在的不一致性問(wèn)題,開(kāi)發(fā)人員就得利用各種客戶端檢測(cè)方法,來(lái)突破或規(guī)避各種局限性。
檢測(cè)Web客戶端的手段很多,各有利弊。在服務(wù)器端,用戶代理檢測(cè)是一種常用且廣為接收的做法。通過(guò)對(duì)瀏覽器發(fā)送的用戶代理字符串的內(nèi)容進(jìn)行檢測(cè),來(lái)識(shí)別用戶的瀏覽器。

2.navigator.userAgent

BOM,即瀏覽器對(duì)象模型。BOM提供了很多對(duì)象,用于訪問(wèn)瀏覽器的功能,且這些功能與網(wǎng)內(nèi)內(nèi)容無(wú)關(guān)。其主要方面已被w3c加入HTML5豪華套餐。
BOM包含window、location、navigatorscreenhistory對(duì)象,navigator對(duì)象中的userAgent屬性便是用戶代理字符串。

3.用戶代理檢測(cè)代碼
var ua = navigator.userAgent;//用戶代理字符串
3.1 呈現(xiàn)引擎檢測(cè)

主要檢測(cè)五大呈現(xiàn)引擎(渲染引擎):IE、Gecko、WebKit、KHTML 和 Opera。
為了不在全局作用域中添加多余的變量,使用模塊增強(qiáng)模式來(lái)封裝檢測(cè)腳本。檢測(cè)腳本的基本代碼結(jié)構(gòu)如下所示:

var client = function () {
    var engine = {
        //呈現(xiàn)引擎
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,
        //具體的版本號(hào)
        ver: null
    };
    //檢測(cè)呈現(xiàn)引擎

    return {
        engine: engine
    };
}();

client全局變量,用于保存相關(guān)信息。匿名函數(shù)內(nèi)部定義了一個(gè)局部變量engine,每個(gè)呈現(xiàn)引擎都對(duì)應(yīng)著一個(gè)屬性,屬性的值默認(rèn)為0。如果檢測(cè)到了哪個(gè)呈現(xiàn)引擎,那么就以浮點(diǎn)數(shù)值形式將該引擎的版本號(hào)寫(xiě)入相應(yīng)的屬性。而呈現(xiàn)引擎的完整版本(是一個(gè)字符串),則寫(xiě)入ver屬性。

//檢測(cè)呈現(xiàn)引擎
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)) {
        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);
    }
3.2 識(shí)別瀏覽器
var client = function(){
    var engine = {
        //呈現(xiàn)引擎
        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
    };
    //檢測(cè)呈現(xiàn)引擎和瀏覽器

    return {
        engine: engine,
        browser: browser
    };
}();

代碼中又添加了私有變量browser ,用于保存每個(gè)主要瀏覽器的屬性。與engine變量一樣,除了當(dāng)前使用的瀏覽器,其他屬性的值將保持為0;如果是當(dāng)前使用的瀏覽器,則這個(gè)屬性中保存的是浮點(diǎn)數(shù)值形式的版本號(hào)。同樣,ver屬性中在必要時(shí)將會(huì)包含字符串形式的瀏覽器完整版本號(hào)。
由于大多數(shù)瀏覽器與其呈現(xiàn)引擎密切相關(guān),所以下面示例中檢測(cè)瀏覽器的代碼與檢測(cè)呈現(xiàn)引擎的代碼是混合在一起的。

//檢測(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 = parseFloat(browser.ver);
    } else if (/Version/(S+)/.test(ua)) {
        browser.ver = RegExp["$1"];
        browser.safari = parseFloat(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);
}
3.3 識(shí)別系統(tǒng)平臺(tái)

很多時(shí)候,只要知道呈現(xiàn)引擎就足以編寫(xiě)出適當(dāng)?shù)拇a了。但在某些條件下,平臺(tái)可能是必須關(guān)注的問(wèn)題。那些具有各種平臺(tái)版本的瀏覽器(如 Safari、Firefox 和 Opera),在不同的平臺(tái)下可能會(huì)有不同的問(wèn)題。目前的三大主流平臺(tái)是 Windows、Mac 和 Unix(包括各種 Linux)。
再添加一個(gè)新對(duì)象:

var client = function () {
    var system = {
        win: false,
        mac: false,
        x11: false
    };
    //檢測(cè)設(shè)備
    var p = navigator.platform;
    system.win = p.indexOf("Win") == 0;
    system.mac = p.indexOf("Mac") == 0;
    system.x11 = (p.indexOf("X11") == 0) || (p.indexOf("Linux" == 0);
    return {
        engine: engine,
        browser: browser,
        system: system
    };
}();
3.3.1 識(shí)別具體Windows系統(tǒng)

Windows平臺(tái)下,還可以從用戶代理字符串中進(jìn)一步取得具體的操作系統(tǒng)信息。下表列出了不同瀏覽器在表示不同的Windows操作系統(tǒng)時(shí)給出的不同字符串:

由于用戶代理字符串中的Windows操作系統(tǒng)版本表示方法各異,因此檢測(cè)代碼并不十分直觀。好在,從 Windows 2000 開(kāi)始,表示操作系統(tǒng)的字符串大部分都還相同,只有版本號(hào)有變化。為了檢測(cè)不同的Windows操作系統(tǒng),必須要使用正則表達(dá)式。由于使用 Opera 7 之前版本的用戶已經(jīng)不多了,因此我們可以忽略這部分瀏覽器。

if (system.win) {
    if (/Win(?:dows )?([^do]{2})s?(d+.d+)?/.test(ua)) {
        if (RegExp["$1"] == "NT") {
            switch (RegExp["$2"]) {
                case "5.0":
                    system.win = "2000";
                    break;
                case "5.1":
                    system.win = "XP";
                    break;
                case "6.0":
                    system.win = "Vista";
                    break;
                case "6.1":
                    system.win = "7";
                    break;
                default:
                    system.win = "NT";
                    break;
            }
        } else if (RegExp["$1"] == "9x") {
            system.win = "ME";
        } else {
            system.win = RegExp["$1"];
        }
    }
}
3.3.2 識(shí)別移動(dòng)設(shè)備
var client = function () {
    var system = {
        win: false,
        mac: false,
        x11: false,
        
        // 移動(dòng)設(shè)備
        iphone: false,
        ipod: false,
        ipad: false,
        ios: false,
        android: false,
        nokiaN: false,
        winMobile: false
    };

    //檢測(cè)移動(dòng)設(shè)備
    system.iphone = ua.indexOf("iPhone") > -1;
    system.ipod = ua.indexOf("iPod") > -1;
    system.ipad = ua.indexOf("iPad") > -1;
    system.nokiaN = ua.indexOf("NokiaN") > -1;
    //windows mobile
    if (system.win == "CE") {
        system.winMobile = system.win;
    } else if (system.win == "Ph") {
        if (/Windows Phone OS (d+.d+)/.test(ua)) {
            system.win = "Phone";
            system.winMobile = parseFloat(RegExp["$1"]);
        }
    }
    //檢測(cè) iOS 版本
    if (system.mac && ua.indexOf("Mobile") > -1) {
        if (/CPU (?:iPhone )?OS (d+_d+)/.test(ua)) {
            system.ios = parseFloat(RegExp.$1.replace("_", "."));
        } else {
            system.ios = 2; //不能真正檢測(cè)出來(lái),所以只能猜測(cè)
        }
    }
    //檢測(cè) Android 版本
    if (/Android (d+.d+)/.test(ua)) {
        system.android = parseFloat(RegExp.$1);
    }

    return {
        engine: engine,
        browser: browser,
        system: system
    };
}();
3.3.3 識(shí)別游戲系統(tǒng)

除了移動(dòng)設(shè)備之外,視頻游戲系統(tǒng)中的 Web 瀏覽器也開(kāi)始日益普及。任天堂 WiiPlaystation 3 或者內(nèi)置 Web 瀏覽器,或者提供了瀏覽器下載。Wii 中的瀏覽器實(shí)際上是定制版的 Opera,是專(zhuān)門(mén)為 Wii Remote 設(shè)計(jì)的。Playstation 的瀏覽器是自己開(kāi)發(fā)的,沒(méi)有基于前面提到的任何呈現(xiàn)引擎。這兩個(gè)瀏覽器中的用戶代理字符串如下所示:

Opera/9.10 (Nintendo Wii;U; ; 1621; en)
Mozilla/5.0 (PLAYSTATION 3; 2.00)

第一個(gè)字符串來(lái)自運(yùn)行在 Wii 中的 Opera,它忠實(shí)地繼承了 Opera 最初的用戶代理字符串格式。第二個(gè)字符串來(lái)自 Playstation 3,雖然它為了兼容性而將自己標(biāo)識(shí)為 Mozilla 5.0,但并沒(méi)有給出太多信息,而且設(shè)備名稱(chēng)全部使用了大寫(xiě)字母。

var client = function () {
    var system = {
        win: false,
        mac: false,
        x11: false,
        
        // 移動(dòng)設(shè)備
        iphone: false,
        ipod: false,
        ipad: false,
        ios: false,
        android: false,
        nokiaN: false,
        winMobile: false,

        // 游戲系統(tǒng)
        wii: false,
        ps: false
    };

    //檢測(cè)游戲系統(tǒng)
    system.wii = ua.indexOf("Wii") > -1;
    system.ps = /playstation/i.test(ua);

    return {
        engine: engine,
        browser: browser,
        system: system
    };
}();
3.4 完整代碼

UserAgentDetection.js

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88848.html

相關(guān)文章

  • 戶端檢測(cè)用戶代理檢測(cè)navigator.userAgent

    摘要:檢測(cè)腳本的基本代碼結(jié)構(gòu)如下所示呈現(xiàn)引擎具體的版本號(hào)檢測(cè)呈現(xiàn)引擎全局變量,用于保存相關(guān)信息。如果檢測(cè)到了哪個(gè)呈現(xiàn)引擎,那么就以浮點(diǎn)數(shù)值形式將該引擎的版本號(hào)寫(xiě)入相應(yīng)的屬性。 前言 前端這東西,各種先有事實(shí)后有標(biāo)準(zhǔn)。不管是各大瀏覽器老哥各自為政,還是w3c姍姍來(lái)遲,既有事實(shí)標(biāo)準(zhǔn)難以更改。雖說(shuō)多方割據(jù),互相競(jìng)爭(zhēng),總比一家獨(dú)大,愛(ài)更不更來(lái)得好。但卻苦了我們這些平頭小碼農(nóng)?,頸椎病又加深了啊。 ...

    MangoGoing 評(píng)論0 收藏0
  • JavaScript 戶端檢測(cè)——“用戶代理檢測(cè)”的注意要點(diǎn)

    摘要:用戶代理檢測(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í)。...

    instein 評(píng)論0 收藏0
  • 《JavaScript高級(jí)程序設(shè)計(jì)》筆記:戶端檢測(cè)(九)

    摘要:由于怪癖檢測(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)型和版本中解放出來(lái),讓他們把注意...

    aaron 評(píng)論0 收藏0
  • 《JavaScript高級(jí)程序設(shè)計(jì)》(第3版)讀書(shū)筆記 第9章 戶端檢測(cè)

    摘要:用戶代理檢測(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ì)最通用的方案,然后再使用特定...

    ispring 評(píng)論0 收藏0
  • JavaScript 戶端檢測(cè)(高程三)

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

    msup 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<