JavaScript高程学习笔记之客户端检测(9)

来源:互联网 发布:软件五毛钱特效怎么玩 编辑:程序博客网 时间:2024/05/17 20:33

JavaScript高程学习笔记之客户端检测(9)

@(JavaScript)[学习笔记]


      • JavaScript高程学习笔记之客户端检测9
        • 能力检测
          • 1 更可靠的能力检测
          • 2 能力检测不是浏览器检测
        • 怪癖检测
        • 用户代理检测
          • 1 用户代理字符串的历史 略
          • 2 用户代理字符串检测技术
          • 4 使用方法


  • 使用能力检测
  • 用户代理检测的历史
  • 选择检测方式

1. 能力检测

能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力
理解能力检测识别两个重要概念
第一:先检测达成目的的最常用特性
第二:必须测试实际要用到的特性。一个特性存在,不一定意味着另一个特性也存在

1.1 更可靠的能力检测

在可能的情况下使用typeof操作符

1.2 能力检测不是浏览器检测

最好是一次性检测所有相关特性,而不要分别检测
在实际开发中,应该将能力检测作为确定下一部分解决方案的依据,而不是用它来判断用户使用的是什么浏览器

2 怪癖检测

识别浏览器的特殊行为,想要知道浏览器存在什么缺陷

3. 用户代理检测

通过检测用户代理字符串来确定实际使用的浏览器
电子欺骗:浏览器通过在自己的用户代理字符串加入一些错误或者误导性信息,来达到欺骗服务器的目的

3.1 用户代理字符串的历史
3.2 用户代理字符串检测技术

1. 识别呈现引擎
检测五大呈现引擎:IE、Gecko、WebKit、KHTML和Opera
2. 识别浏览器
3. 识别平台
三大主流平台:window、mac和Unix
4. 识别window操作系统
5. 识别移动设备
6. 识别游戏系统
3.3 完整的代码

var client = function(){    //rendering engines    var engine = {                    ie: 0,        gecko: 0,        webkit: 0,        khtml: 0,        opera: 0,        //complete version        ver: null      };    //browsers    var browser = {        //browsers        ie: 0,        firefox: 0,        safari: 0,        konq: 0,        opera: 0,        chrome: 0,        //specific version        ver: null    };    //platform/device/OS    var system = {        win: false,        mac: false,        x11: false,        //mobile devices        iphone: false,        ipod: false,        ipad: false,        ios: false,        android: false,        nokiaN: false,        winMobile: false,        //game systems        wii: false,        ps: false     };        //detect rendering engines/browsers    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);        //figure out if it's Chrome or 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 {            //approximate version            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);        //determine if it's 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);    }    //detect browsers    browser.ie = engine.ie;    browser.opera = engine.opera;    //detect platform    var p = navigator.platform;    system.win = p.indexOf("Win") == 0;    system.mac = p.indexOf("Mac") == 0;    system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);    //detect windows operating systems    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"];            }        }    }    //mobile devices    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"]);        }    }    //determine iOS version    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;  //can't really detect - so guess        }    }    //determine Android version    if (/Android (\d+\.\d+)/.test(ua)){        system.android = parseFloat(RegExp.$1);    }    //gaming systems    system.wii = ua.indexOf("Wii") > -1;    system.ps = /playstation/i.test(ua);    //return it    return {        engine:     engine,        browser:    browser,        system:     system            };}();
3.4 使用方法

用户代理检测适用

阅读全文
0 0
原创粉丝点击