重大改版
 鱼翔空 2013-11-08 js应用|   0 871 
文章评分 90 次,平均分 5.0

方法一

支持IE8及其以下

var isIE = !-[1,];

这段世界最短的IE检测代码,是利用IE对数组转换的特性完成的。在IE9中,该bug已经修复,该方法不能向后兼容。

方法二

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;
}());

这段代码着实巧妙!既简介、有向后兼容!一般做法都是:正则搜索 USER_AGENT ;

但因为历史原因, USER_AGENT 一直都不准确,而且被各大厂商改的乱七八糟。

比如:

IE10 : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)

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

这都是些什么乱七八糟的什么字符串啊。。。鬼知道 IE12会变成什么!!!

所以使用特性检测、或者USER-AGENT检测既不可靠,也不向后兼容


代码解析:

原理:

    动态创建一个div,利用ie条件注释来往里面插入一个i标签,在来检测i标签是否添加来判断是否是ie浏览器。在while中不断循环来比对ie的版本。

while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
);


what? while(表达式1,表达式2) 这是what?和我们学的while(表达式)不一样?

小技巧,while中如果有多个表达式,以最后一个表达式作为跳出的判断,前面的表达式,不管有多少个,都不会作为跳出的判断,而是执行里面的代码。

例如:while(表达是1,表达是2,表达式3,表达式4) 只以表达式4的true或者false作为跳出判断。

div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',

上面是利用条件注释来判断的

<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->
<!--[if IE]> 所有的IE可识别 <![endif]-->
<!--[if IE 6]> 仅IE6可识别 <![endif]-->
<!--[if lt IE 6]> IE6以及IE6以下版本可识别 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->
<!--[if IE 7]> 仅IE7可识别 <![endif]-->
<!--[if lt IE 7]> IE7以及IE7以下版本可识别 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->
<!--[if IE 8]> 仅IE8可识别 <![endif]-->
<!--[if IE 9]> 仅IE9可识别 <![endif]-->


 

除特别注明外,本站所有文章均为我要编程原创,转载请注明出处来自http://5ycode.com/article/311.html

关于
该用户很懒!
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享