检測浏览器。注意浏览器推断顺序,主要是基于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. Codeforces 954I Yet Another String Matching Problem(并查集 + FFT)

    题目链接  Educational Codeforces Round 40  Problem I 题意  定义两个长度相等的字符串之间的距离为:   把两个字符串中所有同一种字符变成另外一种,使得两个 ...

  2. Python的支持工具[1] -> 可执行文件生成工具[0] -> pyinstaller

    pyinstaller pyinstaller安装方式: pip install pyinstaller 使用方法: cmd –> cd dictionary –> pyinstaller ...

  3. Codeforces 1018D D. Order book

    解法:用l,r分别代表buy的最大值和sell的最小值,add时,若添加的值在l,r之间,则该值有可能作为下一次accept的值 accept x时,x只能在区间[l,r]中,否则无解,若x为l或r, ...

  4. 洛谷—— P3908 异或之和

    https://www.luogu.org/problemnew/show/P3908 题目描述 求1 \bigoplus 2 \bigoplus\cdots\bigoplus N1⨁2⨁⋯⨁N 的值 ...

  5. Binary Tree Vertical Order Traversal -- LeetCode

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  6. [CP1804]最短路

    题目大意: 一个$n(n\le10^5)$个点的图,给定一个常数$c$,每对点$i,j$之间有权值为$(i\oplus j)\times c$的边.另有$m(m\le5\times10^5)$条指定权 ...

  7. python3使用configparser解析配置文件

    http://www.jb51.net/article/87402.htm 需要注意的是每一个字段后面的值外面没有引号,切记,自己第一次配置时,加了引号,搞了半天 没找到错误,, 在用Python做开 ...

  8. git回退到某个commit

    git log查看提交历史及提交的commit_id 回退命令: $ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之 ...

  9. 谈谈 ES7、ES8、ES9 和 Stage 3 的那些事儿

    ES6 作为多年来 JavaScript 的重大版本变革,受到 JavaScript 开发者们的普遍欢迎. 也正是从 ES6 (ES2015) 开始,JavaScript 版本发布变为年更,即每年发布 ...

  10. apache的动态和静态

    apache的动态和静态  http://www.cnblogs.com/eoiioe/archive/2008/12/23/1360476.html(2.0和2.2一样) 关于apache的动态与静 ...