[收藏]判断IE的版本

分类:Javascript| 发布:camnprbubuol| 查看: | 发表时间:2013/7/12

在判断当前浏览器是否IE的方法很多,比如下边放到if条件里边都可以说明是ie浏览器,
!-[1,] window.VBArray window.ActiveXObject window.attachEvent 等等,基本都是利用ie的奇葩(因为其它主流浏览器都很正统:-))

应用例子JS代码如下:

if (-[1, ]) {//非IE
  e.preventDefault();
} else {//IE
  e.cancelBubble = true;
}

上边是判断ie和其它浏览器的鉴别,那么ie本身又分ie5,ie6,ie7,ie8,ie9,ie10,ie11... ie5我们可以忽略了,ie6也快应该被忽略了,期待!!!

ie9像是ie家族的一个分水岭,不过也不是很明显罢了,有几个需要注意一下:
Trident 标识是在 IE9 中引入的。 IE10 才不支持 条件注释

我们都知道,判断ie的版本可以通过user-agent,那么我们第一个方法就用这个吧,也算回顾一下。(重点是第二个方法,请期待一下下吧。(*^__^*) )

方法一: navigator.userAgent

你可以直接在你的浏览器的地址栏中输入:javascript:document.write(navigator.userAgent) 然后回车,看一下,自己的浏览器是一串什么代码。

Internet Explorer 11 的 user-agent:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

Internet Explorer 10 的 user-agent (on Windows 7):

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

上述 user-agent 你还会注意到增加了 Gecko 的标识,而 Safari 是首个标注了 Gecko 的浏览器。

下边是ie9-ie5的user-agent:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; BOIE9;ZHCN)

 

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; BOIE9;ZHCN)

 

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; BOIE9;ZHCN)

 

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; BOIE9;ZHCN)

 

Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; BOIE9;ZHCN)

方法二:号称是最短的判断ie版本的方法

JS代码如下:

// ----------------------------------------------------------
// 一个简短的js来探测ie的版本
// 没有用 user-agent 的方法嗅探
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------
// UPDATE: Now using Live NodeList idea from @jdalton
var ie = (function(){
    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');
 
    while (
        div.innerHTML ='<!--[if gt IE' + (++v) +']><i></i><![endif]-->',
        all[0]
    );
    return v > 4 ? v : undef;
}());

注意一下这个 while 语句。是我觉得最有趣的。对于逗号操作符。我也不熟悉,还只是停留在像变量定义的用法上。比如:

var  a='b', c ='d', e ='f';
var obj = {
a:'b',
c:'d',
e:'f'
}

其实这个比较少见。通常是返回最后一个值。

var a = (1,2,3,5,6,0,9,4); // a === 4

当IE的浏览器模式(或者文档模式)改变的话,我怎么检测当前IE浏览器的版本?

以上两种方法,分别用了User Agent 探测条件注释方法,那么接下来这种方法是:条件编译

如下图,本身浏览器是IE9,可是我改变了(例如使用:X-UA-Compatible改变)浏览器模式,那么userAgent也就随之变化。

IE浏览器模式(或者文档模式)

此时,我们使用方法一: navigator.userAgent获取的就是IE8的信息,因此不能真正的判断出,当前的IE版本。

例如真正的检测浏览器版本是否IE10的方法:

  var isIE10 = false;
    /*@cc_on
        if (/^10/.test(@_jscript_version)) {
            isIE10 = true;
        }
    @*/
    console.log(isIE10);

然后使用下边的代码做判断,是否是IE10

 if (isIE10) {
    // Using Internet Explorer 10
}

真正检测IE浏览器版本(v5.5~v11)的方法:【收藏了】

var IE = (function () {
    "use strict";
 
    var ret, isTheBrowser,
        actualVersion,
        jscriptMap, jscriptVersion;
 
    isTheBrowser = false;
    jscriptMap = {
        "5.5": "5.5",
        "5.6": "6",
        "5.7": "7",
        "5.8": "8",
        "9": "9",
        "10": "10",
        "11": "11"
    };
    jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")();
 
    if (jscriptVersion !== undefined) {
        isTheBrowser = true;
        actualVersion = jscriptMap[jscriptVersion];
    }
 
    ret = {
        isTheBrowser: isTheBrowser,
        actualVersion: actualVersion
    };
 
    return ret;
}());

以上函数,使用方法是:用IE.isTheBrowser来判断当前浏览器是否是IE浏览器,返回类型布尔值,true表示IE,false表示非IE。 用IE.actualVersion来判断IE浏览器的版本号,返回类型字符串,错误的话,返回undefined

扩展阅读:

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/archives/judge-ie-version.html