zoukankan      html  css  js  c++  java
  • js浏览器检测(包括引擎、浏览器、运行环境、pc和移动端检测)

    该函数用于正确识别浏览器相关内容,代码来自于《javaScript高级程序设计》

    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
                    };
                    //平台、设备和操作系统
                    var system = {
                        win: false,
                        mac: false,
                        x11: false,
    
                        //移动设备
                        iphone: false,
                        ipod: false,
                        ipad: false,
                        ios: false,
                        android: false,
                        nokiaN: false,
                        winMobile: false,
    
                        //游戏系统
                        wii: false,
                        ps: false
                    };
    
                    //检测呈现引擎和浏览器
                    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 {
                            //近似地确定版本号
                            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);
                    }
                    //检测浏览器
                    browser.ie = engine.ie;
                    browser.opera = engine.opera;
                    //检测平台
                    var p = navigator.platform;
                    system.win = p.indexOf("Win") == 0;
                    system.mac = p.indexOf("Mac") == 0;
                    system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
                    //检测 Windows 操作系统
                    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"];
                            }
                        }
                    }
                    //移动设备
                    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"]);
                        }
                    }
    
                    //检测 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; //不能真正检测出来,所以只能猜测
                        }
                    }
                    //检测 Android 版本
                    if (/Android (d+.d+)/.test(ua)) {
                        system.android = parseFloat(RegExp.$1);
                    }
                    //游戏系统
                    system.wii = ua.indexOf("Wii") > -1;
                    system.ps = /playstation/i.test(ua);
                    //返回这些对象
                    return {
                        engine: engine,
                        browser: browser,
                        system: system
                    };
                }();

    这个检测可以说是很全了。

    不过,

    用户代理检测是客户端检测的最后一个选择。
    只要可能,都应该优先采用能力检测和怪癖检测。
  • 相关阅读:
    论文(卷积数据流)-Communication Lower Bound in Convolution Accelerators
    CPU架构相关
    Verilog-数据包检测器
    多比特乘法器的分解
    Verilog-数字时钟无毛刺切换
    Booth乘法器
    C++:地平线2019相关题
    C++:char数组和string类
    C++:strcpy函数
    半导体 semiconductor 相关知识
  • 原文地址:https://www.cnblogs.com/tcxq/p/12217860.html
Copyright © 2011-2022 走看看