JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另 一种是通过分析浏览器的userAgent属性来判断的。本文对浏览器各自的userAgent特点做一分析,并给出判断方法:

Windows操作系统浏览器系列:

  • IE浏览器系列:
    特征表现:均以 "mozilla/" 开头,"msie x.0;" 中的x表示其版本;
    判断方法:粗略判断可以只检索 "msie x.0;" 字符串即可,严格判断可检索 "mozilla/x.0 (compatibal; msie x.0; windows nt",不过一般没有这个必要
  • Windows版Firefox:
    特征表现:以"mozilla/x.0"开头,包含"windows nt","gecko/"和"firefox/" ;
    判断方法:粗略判断可以只检索 "firefox/"和"windows nt" 字符串,严格判断可以检索"mozilla/" ,"windows nt","gecko/"和"firefox/" 四个字符串;
  • Windows版Chrome:
    特征表现: 以"mozilla/x.0"开头,包含"windows nt","chrome/",同时包含"applewebkit/","safari/";
    判断方法:粗略判断可以只检索 "windows nt"和"chrome/"字符串,严格判断可以同时检索 "mozilla/" ,"windows nt","applewebkit/","safari/","chrome/" 五个字符串;
  • Windows版Opera:
    特征表现:以"opera/"开头,含有"windows nt","presto/" 字符串;
    判断方法:粗略判断只检索 "windows nt"和"opera/"字符串,严格判断同时检索 "opera/","windows nt" 和 "presto/";
  • Windows版Safari:
    特征表现:以"mozilla/"开头,同时含有"windows nt","applewebkit/","safari/";
    判断方法:粗略判断可以检索含有 "windows nt","safari/" 同时不包含 "chrome/",严格判断需要同时含有"mozilla/","windows nt","applewebkit/","safari/"但是不包含"chrome/";
  • 小结:Windows操作系统上的浏览器userAgent均包含"windows nt"字符串来表征windows操作系统。

iPhone平台浏览器系列:

  • iPhone自带safari:
    特征表现:以"mozilla/"开头,含有"iphone"字符串,同时含有 "mobile/","safari/"字符串;
    判断方法:粗略判断只检索 "iphone"和"safari/"字符串,严格判断则要同时包含 "mozilla/","iphone","mobile/","safari/"四个字符串
  • iPhone版Opera Mobile:
    特征表现: 以"opera/"开头,含有"iphone"字符串,同时含有 "opera mini/","presto/"字符串;
    判断方法:粗略判断只检索 "iphone"和"opera/"字符串,严格判断则要同时包含 "opera/","iphone","opera mini/","presto/"四个字符串
  • 小结:iPhone手机上的浏览器userAgent均包含"iphone"字符串

Android平台浏览器系列:

  • Android自带浏览器(有人说其实是就chrome,但google自己未做表示,且还在开发一个Android上运行的Chrome to Phone):
    特征表现: 以"mozilla/"开头,含有"android"和"linux" 字符串,同时含有 "applewebkit/","mobile safari/"字符串;
    判断方法:因为还不知道Android上未来会不会有独立的safari(估计不会了),所以建议直接严格判断,检索 "mozilla/","android","linux","applewebkit/","mobile safari/"五个字符串
  • Android版Opera Mobile:
    特征表现: 以"opera/"开头,含有"android"和"linux" 字符串,同时含有 "opera mobi/","presto/"字符串;
    判断方法:粗略判断只检索 "android"和"opera/",严格判断则要同时包含"opera/","android","linux","opera mobi/","presto/"五个字符串
  • Android版Firefox:
    特征表现:以"mozilla/"开头,含有"android"和"linux" 字符串,同时含有 "firefox/","gecko/","fennec/"字符串; 
    判断方法:粗略判断只检索 "android"和"firefox/",严格判断则要同时包含"mozilla/","android","linux","firefox/","gecko/","fennec/"六个字符串
  • 小结:Android平台上的浏览器userAgent均包含"android"和"linux"字符串

以上对windows、iphone、android三大平台的主流浏览器解析就基本结束了,其他平台的linux估计至少与android平台应该类似,而采用了Mac OS的iPad和麦金塔应该与iphone平台类似,故而暂时先不做解析,也因为手头没有那么多设备和操作系统来测试,希望日后能够补上。

现在的网站产品开发要求跟以前又不一样了,因为不仅要满足电脑浏览,还需要满足用户通过智能手机(这里仅指iphone、android、windows phone等真正的智能手机,blackberry和palm这样的小众半智能系统暂时不考虑,至于symbian这个伪智能系统就一边玩去吧)通过以上三个具有代表性的平台,也大致可以推测出根据浏览器userAgent判断用户设备的解决方案了。

1、如果需要判断操作系统,方法比较简单,在userAgent里面检索以下字符串:

  • 含有"windows nt":显而易见了,windows操作系统,nt后面的版本号可以判断OS版本;
  • 含有"mac":苹果的Mac OS X或者其他Mac OS内核的系统;
  • 含有"iphone":苹果iphone手机专有的,一般情况下也应该含有"mac";
  • 含有"ipad":苹果iPad平板电脑(资料表明iPad的浏览器userAgent同时含有"mac","iphone","ipad");
  • 含有"linux":Linux操作系统或者其他以linux作为内核的操作系统;
  • 含有"android":谷歌的Android操作系统,有可能是智能手机,也有可能是安卓版的平板电脑哦,一般情况下android平台上的userAgent也应该包含"linux";
  • 含有"unix","sunos","bsd"三者之一:Unix系统,其实对这个系统的用户体验问题,目前几乎可以不用考虑了;
  • 含有"ubuntu":ubuntu定制版的linux
  • ……

你也看到了,判断操作系统及其版本其实并不一直有用,但总有能用到的地方,比如开发专门针对iphone、ipad、android等设备屏幕分辨率的页面

2、判断浏览器的内核,方法也不困难,我自己琢磨出来的,不一定都对啊:

  • IE(Trident)内核(IE for Mac, IEs4Linux之类的就不用说了,只考虑windows下的):以"mozilla/"开头,含有"windows nt"和"msie"字符串;
  • Firefox(Gecko)内核:以"mozilla/"开头,含有"firefox/"和"gecko/"字符串的就是啦,其中Android版的还带有"fennec/"字符串;
  • Opera()内核:以"opera/"开头,含有"presto/"字符串,其中iphone版还带有"opera mini/",Android版也带有"opera mobi/";
  • Webkit内核:以"mozilla/"开头,含有"applewebkit/"和"safari/"字符串,其中带有"chrome/"的就是Chrome浏览器,不带的就是Safari或其他;
  • 以上就是主要的浏览器内核了

浏览器内核才是解决兼容性的关键问题所在,然而,这个兼容性问题已经有jQuery和Extjs等框架帮你解决了,因此这个判断只针对个别页面的CSS样式在不同内核渲染效果不同的情况下使用,当然了,同样的内核在智能手机和电脑等不同设备上渲染结果也不同,这一点也需要注意。

3、判断浏览器useAgent的实际应用举例:

  • 不同浏览器内核对页面的渲染效果不同,虽然已经有jQuery和Extjs等为我们做了兼容处理,但是依然会有一些细小的差别需要我们单独处理,此时需要判断浏览器内核;
  • 用户并不仅仅是通过电脑访问网站的,随着智能手机的日益普及还有平板电脑的大行其道,使用这两者来上网的比例越来越高,怎么办?平板电脑还好,屏幕大分辨率高,智能手机受限于他的屏幕尺寸和分辨率,虽有强劲的处理能力,也可以完美支持现有的网站,但是为客户多考虑一点总没有坏处你说对吧?毕竟通过局部缩放拖拽的方式看网页很不舒服,这时呢,我们就可以专门为iphone、android这样的窄条屏幕提供一个专用版本来布局了,一来提升浏览体验,二来降低网络流量,加快访问速度;
  • 做访客流量分析,通过判断客户浏览器类型并记录其数量,来优化设计自己的网站,以分别提升其客户体验
<script type="text/javascript">
        var Sys = {};
        var ua = navigator.userAgent.toLowerCase();
        var s;
        (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
        (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
        (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
        (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
        (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;

//以下进行测试
        if (Sys.ie) document.write('IE: ' + Sys.ie);
        if (Sys.firefox) document.write('Firefox: ' + Sys.firefox);
        if (Sys.chrome) document.write('Chrome: ' + Sys.chrome);
        if (Sys.opera) document.write('Opera: ' + Sys.opera);
        if (Sys.safari) document.write('Safari: ' + Sys.safari);
</script>

或:
KindEditor开源编辑器源码中的检测浏览器的方法:
KE = {};
KE.browser = (function () {
var ua = navigator.userAgent.toLowerCase();
return {
    VERSION:ua.match(/(msie|firefox|webkit|opera)[\/:\s](\d+)/) ? RegExp.$2 : "0", 
    IE:(ua.indexOf("msie") > -1 && ua.indexOf("opera") == -1), 
    GECKO:(ua.indexOf("gecko") > -1 && ua.indexOf("khtml") == -1), 
    WEBKIT:(ua.indexOf("applewebkit") > -1), 
    OPERA:(ua.indexOf("opera") > -1)
};
})();

javascript根据浏览器userAgent判断浏览器类型相关推荐

  1. 修改Firefox浏览器 user-agent 微信浏览器UA

    在有些情况下,修改user agent还会起到防网页木马的作用. 在 Firefox 地址栏中输入 about:config. 右键新建一个名为 general.useragent.override ...

  2. html判断手机浏览器,JS判断浏览器iOS(iPhone)、Android手机移动端

    通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端.网上搜索来的,比较简单: var u = navigator.userAgent; var isAndroid ...

  3. html检测浏览器内核,判断浏览器的内核及版本号方法汇总_jquery

    通过jquery 判断浏览器的内核及版本号 通过浏览器版本信息判断各浏览器 var _uat=navigator.userAgent; if(_uat.indexOf("MSIE 6.0&q ...

  4. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  5. 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问

    javascript 的navigator属性,不常用,但是用处也不少,主要用处是在做浏览器兼容的问题的时候,现在有的网站已经不兼容IE6,用户假如用IE6浏览网页的话,会提示浏览器升级等信息.或者判 ...

  6. 根据浏览器标识判断浏览器类型

    获取浏览器标识 navigator.userAgent.toLowerCase(); windows谷歌浏览器 "mozilla/5.0 (windows nt 10.0; win64; x ...

  7. android 浏览器 useragent,各种浏览器UserAgent一览表(桌面+移动)

    桌面 ============================================ IE 而IE各个版本典型的userAgent如下: Mozilla/4.0 (compatible; M ...

  8. JS使用userAgent判断操作系统和浏览器类型

    1.应用场景: 在做ios和android应用时,需要扫码进行应用的下载,可以通过扫描一个二维码,然后跳到指定的页面,页面中使用js判断操作系统和浏览器类型,然后给出不同的下载地址.这样就可以实现an ...

  9. javaScript解决浏览器兼容问题,判断浏览器是ie或者Chrome

    最近在写一个项目中遇到了一个问题,从java后台输出一段字符串,需要用到这个字符串,返回到页面上面. 假定该字符串为"" 在Chrome上得到的结果是<pre style= ...

  10. java判断浏览器类型_判断浏览器类型

    一.判断是否为IE 以前判断是否IE浏览器用的是window.navigator.userAgent,跟踪这个信息,发现在开发环境,识别为IE10,但访问服务器则识别为IE11,但IE11的userA ...

最新文章

  1. [Ms SQL] 基本創建、修改與刪除
  2. mysql导入sql文件限制,Mysql导入大容量SQL文件数据有关问题
  3. boost::contract模块实现name list名单的测试程序
  4. springboot整合rabbitmq(搭建)
  5. 请在贵网站的根目录下部署一个文件_使用 github pages, 快速部署你的静态网页
  6. php-对银行卡号做掩码处理
  7. gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您
  8. Grunt Server:Fatal error: Port 35729 is already in use by another process.
  9. oracle解锁用户
  10. linux shell脚本监控进程崩溃自动重启
  11. 三国志·魏书·牵招传
  12. 视音频学习入门---ffmpeg篇(四)---基于windows平台的ffmpeg开发(二)
  13. react-native 报错 Text strings must be rendered within a <Text> component.
  14. 什么是敏捷开发Scrum
  15. 易语言可以编译c语言,刷屏软件?其实易语言也可以做这种软件
  16. 汉明码(海明码、hamming code)通俗易懂的解释!!!!
  17. 路由器DNS被劫持 解决办法、网站被劫持怎么办怎么解决
  18. iOS7适配问题 UITableView上方出现空白
  19. tryhackme圣诞挑战2021-Advent of Cyber 3-day2-越权漏洞,修改cookie
  20. python word 质检报告签字位置动态调整及word转PDF

热门文章

  1. 1538_AURIX_TriCore内核架构_地址映射以及存储配置
  2. Subspace Adversarial Training
  3. 华为血压表WATCH D测量血压的数据可靠吗
  4. key位置 win10生成的ssh_WIN 10生成SSH密钥教程
  5. 竹笛的分类有哪些?来认识竹笛的大家族。
  6. mysql opened tables_MySQL_MySQL性能优化之Open_Table配置参数的合理配置建议,在MySQL数据库中,Opened_tables表 - phpStudy...
  7. abp ddd mysql_初识ABP vNext(1):开篇计划基础知识
  8. Arthas--深入排查java进程消耗CPU或内存过高问题
  9. bzoj 4987 Tree
  10. Magento创建主题