检測浏览器。注意浏览器推断顺序,主要是基于userAgent做推断。

//检測浏览器

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 ua = navigator.userAgent;

    //浏览器检測有顺序

    if(window.opera){//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);

    }

    return {

        engine:engine,

        browser: browser

    };

}();

//调用

if (client.engine.webkit) { //if it’s WebKit 

 if (client.browser.chrome){ 

 //运行针对 Chrome 的代码 

 } else if (client.browser.safari){ 

 //运行针对 Safari 的代码 

 } 

} else if (client.engine.gecko){ 

 if (client.browser.firefox){ 

 //运行针对 Firefox 的代码 

 } else { 

 //运行针对其它 Gecko 浏览器的代码 

 } 

}

js识别不同浏览器的更多相关文章

  1. JS识别不同浏览器信息

    总所周知,不同浏览器兼容是不一致的,然而今天我在Coding的时候深深体会到那个痛苦,一样的代码在Firefox里面是没问题的,可以根据索引找到 对应的对象元素然后进行操作,但是同样的却获取不到对象元 ...

  2. 识别手机浏览器代码【C#和JS两种语言】

    C# 识别手机浏览器代码: public static bool MobileBrowserDetect() { bool bismobile = false; try { #region 包含and ...

  3. 浏览器兼容处理(HTML条件注释、CSSHack和JS识别)

    前面的话 本文中所有IEx+代表包含x及x以上:IEx-代表包含x及x以下,仅个人习惯.例:IE7+代表IE7.IE8…… 本文中所有例子全部经过测试,欢迎交流. HTML识别 条件注释法(IE10+ ...

  4. 通过JS检测360浏览器

    如何通过JS检测360浏览器? 尝试了一大堆方法,网上大多数办法都是通过navigator.userAgent来判断,这可能在几年前是行得通的,现在360userAgent输出来跟谷歌除了版本号其余一 ...

  5. 笔记:1.css样式,最前边加 @charset "utf-8";是为什么2.js判断各种浏览器的方法

    表明CSS文件的页面编码为UTF-8..如果这个CSS的文件编码也是UTF-8的话..那么在浏览器中看到的CSS文件的页面中中文的注释或者中文字体就可以正确显示为中文,如果CSS的文件编码和页面不一致 ...

  6. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  7. JS获取当前浏览器的类型

    <script type=“text/javascript”> function isIE(){return navigator.appName.indexOf(“Microsoft In ...

  8. SlimerJS – Web开发人员可编写 JS 控制的浏览器

    SlimerJS 是一个提供给 Web 开发人员,可通过脚本编程控制的浏览器.它可以让你使用 Javascript 脚本操纵一个网页:打开一个网页,点击链接,修改的内容等,这对于做功能测试,页面自动机 ...

  9. js/jquery判断浏览器的方法小结

    在网站前端开发中,浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道.今天我们把 ...

随机推荐

  1. asp.net如何更改默认的登陆帐号/密码:16aspx/16aspx

    修改数据库,在DB_16aspx文件夹下面 sql server 2005+的数据库打开.

  2. FZU-2216 The Longest Straight(尺取法)

     Problem 2216 The Longest Straight Accept: 523    Submit: 1663Time Limit: 1000 mSec    Memory Limit ...

  3. H-Index II -- LeetCode

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...

  4. [POI2007]Tourist Attractions

    题目大意: 给你一个$n(n\leq 2\times 10^4)$个点,$m(m\leq 2\times 10^5)$条边的带边权的连通图.其中有$k(k\leq 20)$个关键点.关键点之间有$g$ ...

  5. iOS 7.1 arm64 编辑报错 警告解决办法

    昨天把我的4S更新到iOS7.1,今天发下需要更新Xcode到5.1,发现打包项目Archive的时候,多了一堆警告和错误,很是郁闷. 郁闷没有用,作为一个合格的程序员,要学会淡定!看看警告和错误的大 ...

  6. Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)

      linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接 ...

  7. 关于hibernate中映射中有many to one等外键关联时的问题

    hibernate中的对象的3种状态的理解及导致报错object references an unsaved transient instance - save the transient insta ...

  8. MySQL增加访问ip

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;

  9. golang sync.Cond 类

    众所周知,go语言在多线程方面的支持是十分完备的.在go语言sync包中提供了一个Cond类,这个类用于goroutine之间进行协作. 这个类并不复杂,只有三个函数,Broadcast() , Si ...

  10. ECSHOP后台开发模块步骤

    一.建数据库二.添加到后台导航栏并配置相关语言包三.权限配置四.添加增删查改五.增加其他功能(复制,搜索(暂时调不出来页面),排序,转移,AJAX) 以添加支付信息模块为例 第一步首先我们用phpmy ...