所有的前端开发人员都没有办法回避一个问题,那就是浏览器版本判断,当我们无法回避需要进行浏览器版本判断时,前辈们往往会告诉我们,可以判断 UserAgent这个用来标示浏览器的字符串,通过判断这一字符串的特征来判断浏览器版本。但是现在浏览器层出不穷,许多浏览器都内置更改 UserAgent的选项,或者专门的插件,使得UserAgent告诉我们的信息越来越不准确。那么什么样的方式判断浏览器版本才是比较靠谱的呢?查查 浏览器厂商提供的文档,我们不难发现,许多浏览器厂商其实为我们内置了专门的标示方法,或者有其非常独特的DOM对象,利用这些,我们就能精确的判断浏览 器,甚至判断出版本号呢。下面我们开始演示。我们从简单的先开始。

1.presto内核(Opera)
opera浏览器中有个特有的window.opera对象,通过opera.version()可以直接获取版本号,这是官方内置方法。

目前对于webkit 内核的 opera 已经没有这个内置标志了

2.webkit内核(safari、chrome、maxthon3高速模式)
webkit内核的浏览器中window对象一下成员以“WebKitXxxxx”开头,这是其有别于其他浏览器内核的独特特征
        1)safari浏览器中,navigator.vendor的值为“Apple Computer, Inc.”
        2)chrome中有两个特有的对象window.google、window.chrome、window.chromium
        3)maxthon下window.external.mxVersion为版本号

3.Gecko内核(Firefox)
继承netscape浏览器衣钵的Firefox至今依然保留留着window.netscape对象,且navigator.product的值为“Gecko”

4.IE
IE的JScript独有的条件注释可以方便的与其他浏览器区别开来,document.documentMode可以判断IE8以上的版本号,I5、E6、7 可根据DOM对象差异来区别。

原理讲完,下面写一个DEMO,用上边的方法重写jQuery的$.browser.对象。

(function(win, $){

    var doc = win.document,
nav = win.navigator,
html = doc.documentElement; //浏览器版本判断
/*@cc_on @if (@_jscript)
$.browser = {
msie: true,
version: doc.documentMode || (doc.compatMode == "CSS1Compat" ? "XMLHttpRequest" in win ? 7 : 6 : 5)
};
nav.language = nav.userLanguage;
@else @*/ if ( win.opera ) {
//opera
$.browser = {
opera: true,
version: opera.version()
};
nav.language = nav.language.replace(/-[a-z]{2}$/, function(str ) {
return str.toUpperCase();
});//20150115 测试只对opera 浏览器不起作用,其他的都ok
} else {
function browser(name){
if( !$.browser[name] ) {
$.browser = {version: true};
$.browser[name] = true;
}
}
if ( win.netscape && nav.product == "Gecko" ) {
//firefox
browser("mozilla");
} else {
//webkit
browser("webkit");
$.browser.chrome = !!win.chrome;
$.browser.safari = /^apple\s+/i.test(nav.vendor);
}
} /*@end @*/
})(this, jQuery);

在加一句:console.log("v"==="\v")

//IE8以下的浏览器会返回true;IE9,chrome,firefox会返回false;因为IE8,7,6会把v和\v都编译为垂直制表符。

自测:目前只有opera 判断不了,因为现在加入了 webkit 内核的 opera 已经不再具有 window.opera 了,希望大家找到更好的解决判断浏览器类型的办法!
【来自:http://www.w3cfuns.com/article-2440-1-1.html】

更靠谱的js判断浏览器及其版本的更多相关文章

  1. 实验:JS判断浏览器中英文版本

    <script type="text/javascript"> var lang = (navigator.systemLanguage?navigator.syste ...

  2. JS判断浏览器类型及版本

    浏览器 ie firefox opera safari chrome 分类: 一路辛酸---JavaScript 你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, S ...

  3. js判断浏览器类型 js判断ie6不执行

    js判断浏览器类型 $.browser  对象 $.browser.version 浏览器版本 var binfo = ''; if ($.browser.msie) { binfo = " ...

  4. js判断浏览器类型以及版本

    你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器. 几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的 ...

  5. Js 判断浏览器类型整理

    判断原理 JavaScript是前端开发的主要语言,我们可以通过 编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性 ...

  6. JS判断浏览器类型,JS判断客户端操作系统

    JS判断浏览器类型 function judge(){ var browser = { versions: function() { var u = navigator.userAgent, app ...

  7. JS判断浏览器类型和详细区分IE各版本浏览器

    今天用到JS判断浏览器类型,于是就系统整理了一下,便于后期使用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  8. js判断浏览器是否安装或启用了flash的方法总结

    目录 # js判断浏览器是否安装或启用了flash的方法 # chrome浏览器启用flash插件的方法 # 参考 # js判断浏览器是否安装或启用了flash的方法 在传统浏览器,可以使用windo ...

  9. JS判断浏览器类型的方法总结(IE firefox chrome opera safari)

    JS判断浏览器类型的方法总结,可判别当前客户端所使用的浏览器是ie,firefox,safari,chrome或者是opera,另外js可以精确判断到ie浏览器的版本,依然直接上代码,需要的朋友可按照 ...

随机推荐

  1. hunnu 小明的烦恼——找字符串

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 小明的烦恼——找字符串 ...

  2. Linux中的权限管理

    touch 11.txt(创建了一个文件) chown zhangsan:zhangsan 11.txt ll(可看到11.txt的属主和属组都改为了zhangsan) useradd lisi(添加 ...

  3. nyoj开心的小明

    这个问题是01背包,而对于编程之美那道是完全背包问题,在编程之美中也有一个0,1背包问题. 而且是容量是小于等于,不是等于,对于是否等于,在初始化参数时候不一样,不小于全部初始化为0,恰好等于,初始化 ...

  4. bzoj 1922 [Sdoi2010]大陆争霸(最短路变形)

    Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...

  5. passwnger

    环境:ubuntu10.04 + nginx + passenger + ruby1.8.7 rails2.3.x #安装nginx(手动编译) $  mkdir -p /home/mouse/opt ...

  6. puppet_list

  7. POJ 3295 Tautology (构造题)

    字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...

  8. Learning JavaScript Design Patterns The Module Pattern

    The Module Pattern Modules Modules are an integral piece of any robust application's architecture an ...

  9. eclipse mybatis Generator

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  10. DNF即将代替Yum

    也许你会惊奇在新安装的 Fedroa 22中没有找到 yum 包,也不明白为何在调用 /usr/bin/yum 或使用各种 Yum 插件时会得到警告.嗯,你看到的没错,Yum 已经去了~.直白的说, ...