检測浏览器。注意浏览器推断顺序,主要是基于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. Guava源码学习(五)EventBus

    基于版本:Guava 22.0 Wiki:EventBus 0. EventBus简介 提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,E ...

  2. (21)C#VS快捷键

    1.移动光标 ctrl+ 右键:按单词移动 home:移动到一行得开头 ,end:移动到一行得末尾 ctrl+home:移动到文本得第一行初始位置,ctrl+end文本最末尾 pageDn:往文件下面 ...

  3. 值得收藏:一份非常完整的MySQL规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  4. 学习Flash 3D图形图像知识的网络资源集合

    1. 华中科技大学计算机学院开放式课程--计算机图形学 http://cs.hust.edu.cn/webroot/courses/csgraphics/index.php 2.深入Stage3D_7 ...

  5. 六. 异常处理4.try和catch的使用

    尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...

  6. TQ2440平台上LCD驱动的移植

    参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...

  7. Nand 的几个名词:oob,bbt,ecc

    转:http://blog.csdn.net/lanmanck/article/details/4230904 例如Samsung K9F1208U0B,数据存储容量为64MB,采用块页式存储管理.8 ...

  8. 【spring Boot】1.创建第一个springBoot项目

    入手springBoot,搭建第一个springBoot项目. 看官方文档还是有点别扭. https://docs.spring.io/spring-boot/docs/current-SNAPSHO ...

  9. CSS3:2D转换方法

    利用transform 可以实现旋转.缩放.倾斜.移动 属性有:translate.scale 移动: translateX(10px); //水平方向移动10px translateY(50px); ...

  10. http://jingyan.baidu.com/article/0eb457e5208cbb03f0a9054c.html

    http://jingyan.baidu.com/article/0eb457e5208cbb03f0a9054c.html