JavaScript客户端检测的例子

一:能力检测(特性检测)

能力检测不是识别特定的浏览器,而是识别浏览器的能力。

二:怪癖检测

和能力检测不同,它主要是识别浏览器的bug,而且各个浏览气的bug应该都是独有的。

三:用户代理检测

用户代理检测通过检测用户代理字符串来确定实际使用的浏览器。这里我们可以先了解下用户代理字符串的历史

用户代理字符串检测技术主要检测以下几个信息:

•识别呈现引擎
•识别浏览器
•识别平台
•识别windows操作系统
•识别移动设备
•识别游戏系统
以下是完整的用户代理字符串检测脚本

 代码如下 复制代码
var client = function() {
    //呈现引擎
    var engine = {
        ie:0,
        gecko:0,
        webkit:0,
        khtml:0,
        opera:0,
        //完整的版本号
        ver:null
    };
    //浏览器
    var browser = {
        //主要浏览器
        ie:0,
        firefox:0,
        konq:0,
        opera:0,
        chrome:0,
        safari:0,
        //具体版本号
        ver:null
    };
    //平台、设备及操作系统
    var system = {
        win:false,
        mac:false,
        x11:false,
        //移动设备
        iphone:false,
        ipod:false,
        nokiaN:false,
        winMobile:false,
        macMobile: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);
    //检测操作系统
    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;
                    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.iphod = ua.indexOf(“iPod”) > -1;
    system.nokiaN = ua.indexOf(“NokiaN”) > -1;
    system.winMobile = (system.win = “CE”);
    system.macMobile = (system.iPhone || system.iPod);
    //游戏系统
    system.wii = ua.indexOf(“Wii”) > 1;
    system.ps = /playstation/i.test(ua);
    //返回这些对象
    return {
        engine: engine,
        browser: browser,
        system: system
    };
}();

最后我们在使用客户端检测方法时,优先考虑使用能力检测,最后才考虑用户代理检测。

时间: 2024-09-25 06:28:41

JavaScript客户端检测的例子的相关文章

javascript客户端检测技术

原文:javascript客户端检测技术 javascript客户端检测技术  1. Firefox    Gecko是firefox的呈现引擎.当初的Gecko是作为通用Mozilla浏览器一部分开发的,而第一个采用Gecko引擎的浏览器是Netscape6: 我们可以使用用户代理检测下:如下JS代码: var ua = navigator.userAgent; console.log(ua); 在windows下firefox下打印如下:    Mozilla/5.0 (Windows NT

JavaScript 客户端检测技术学习分享

最近学习了 JavaScript 客户端检测 的知识点,写这篇文章是为了方便自己以后有需要时查阅,同时也把自己的学习成果分享给大家. 客户端检测方案分三种,分别是: 能力检测 怪癖检测 用户代理检测 能力检测是指在编写代码之前先检测特定浏览器的能力.比如,脚本在调用某个函数之前,可能要先检测该函数是否存在. 怪癖检测实际上是浏览器实现中存在的 bug,例如,早起的 WebKit 中存在一个怪癖,即它会在 for-in 村换中返回被隐蔽的属性. 用户代理检测是通过检测用户代理字符串来识别浏览器.因

Javascript实现检测客户端类型代码封包_javascript技巧

检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 * ******************************************************************** * 各版本浏览器在windows10.0下的用户代理字符串:

对JavaScript客户端应用编程的一些建议_基础知识

你可能注意到了,最近的一段时间越来越多的Web应用有变复杂的趋势,重心从服务端慢慢向着客户端转移. 这是个正常的趋势么?我不知道.支持和反对者的讨论就像是在讨论复活者和圣诞节哪一个更好一样; 很难说哪一方观点就是完全正确的.因此,本文不会探讨究竟哪一方是对的,不过我还是试图解释一下使用大家所熟知的面向对象编程也许可以成功的解决客户端编程中存在的一些问题. 不太规范的代码的示例 为了顾及一个应用的响应以及用户体验, 导致我们创建了持续增长的复杂的代码, 这些代码变得难于理解和维护. 你可以轻松的想

对JavaScript客户端应用编程的一些建议

  这篇文章主要介绍了对JavaScript客户端应用编程的一些建议,主要针对MVC框架框架的一些相关使用问题,需要的朋友可以参考下 你可能注意到了,最近的一段时间越来越多的Web应用有变复杂的趋势,重心从服务端慢慢向着客户端转移. 这是个正常的趋势么?我不知道.支持和反对者的讨论就像是在讨论复活者和圣诞节哪一个更好一样; 很难说哪一方观点就是完全正确的.因此,本文不会探讨究竟哪一方是对的,不过我还是试图解释一下使用大家所熟知的面向对象编程也许可以成功的解决客户端编程中存在的一些问题. 不太规范

Javascript客户端脚本的设计和应用_基础知识

Javascript基本概念 JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言,最初由Netscape公司创造出来,起名Live Script,它和Java的关系只有一个:名字比较像.使用它的目的是与HTML超文本标记语言.Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用.从而可以开发客户端的应用程序等.它是通过嵌入或调入在标准的HTML语言中实现的.它的出现弥补了HTML语言的缺陷,

基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统_javascript技巧

废话不多说了,直接给大家贴js代码了,代码附有注释,感兴趣的朋友一起学习吧. /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 * ******************************************************************** * 各版本浏览器在windows10.0下的用户代理字符串:

javascript 特性检测并非浏览器检测

javascript 特性检测并非浏览器检测 详细出处参考:.net/article/21834.htm">http://www.111cn.net/article/21834.htm 起初前端工程师们就极力反对浏览器检测,他们认为类似user-agent嗅探的方法是很不好的,理由是它并不是一种面向未来的代码,无法适应新版的浏览器.更好的做法是使用特性检测,就像这样: 复制代码 代码如下: if (navigator.userAgent.indexOf("MSIE 7"

SharePoint JavaScript 客户端对象使用视频教程

本次视频教程是为大家介绍如何使用SharePoint JavaScript客户端对象,包括对于站点.列表.文档库.列表项.文件夹.文件和附件等基本对象的操作,同时,为大家举几个简单的应用的例子,让大家更加深刻的理解SharePoint JavaScript客户端对象的适用范围. 本次系列课程既使用本地版本的SharePoint环境,同样适用于office 365中的SharePoint Online环境,希望能够对大家入门SharePoint有所帮助. 课程目录 SharePoint JavaS