• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

JS判断IE浏览器的最简短方法

JavaScript 水墨上仙 1599次浏览

JS判断IE浏览器的最简短方法

IE浏览器不管是什么版本,总是跟Web标准有些不太兼容。对于代码工作者来说,自然是苦不堪言,为了考虑IE的兼容问题,不管是写&nbspCSS&nbsp还是&nbspJS,往往都要对&nbspIE&nbsp特别对待,这就少不了做些判断。本文不讨论如何区分&nbspIE&nbsp的样式,仅是&nbspJS&nbsp判定&nbspIE&nbsp浏览器。

&nbsp&nbsp&nbsp&nbsp这个目前世界上最短的&nbspJavascript&nbsp判定&nbspIE&nbsp浏览器的方法来自俄罗斯!它已经在各版本的&nbspIE&nbsp以及目前其他流行的浏览器上经过测试,基于&nbspIE&nbsp的&nbspBug,微软虽然已经意识到,但是从来没有纠正过。

    <script type='text/javascript'>  
    var ie = !-[1,];  
    alert(ie);  
    </script>  

&nbsp&nbsp&nbsp&nbsp以上代码运行结果:IE&nbsp下返回true,其他标准浏览器返回false。!-[1,],仅仅只有&nbsp6&nbspbytes!
不过如果反过来判断,标准浏览器返回&nbsptrue&nbsp而&nbspIE&nbsp返回&nbspfalse的话,则可以再缩短一个byte。
&nbsp

    <script type='text/javascript'>  
    notIe = -[1,];  
    if(-[1,]){  
    // 标准浏览器代码  
    }else{  
    // IE Only的代码  
    }  
    </script>  

&nbsp&nbsp&nbsp&nbsp看完了这些,你们是不是很好奇这些是怎么运行的?请继续看下文。
这个&nbspBug&nbsp产生的原因是&nbspIE&nbsp会添加一个空数组元素到数组元素的总数里。
[1,].&nbspLength标准浏览器会返回&nbsp1&nbsp(基于标准的&nbspECMAscript&nbsp,在数组最后的逗号”,”会被忽略,这是为了方便在一列里显示以及自动生成等),但是&nbspIE&nbsp会返回&nbsp2。当你打印这个数组的时候&nbspIE&nbsp将会返回&nbsp“1,&nbsp“,也就是两个元素,而其他标准浏览器将会返回&nbsp“1″。

这很容易验证,比如在&nbspIE&nbsp和&nbspFF中运行以下代码:

     <script type='text/javascript'>  
    alert([,]==',');  
    //这是8个字符判定IE  
    </script>  

&nbsp&nbsp&nbsp&nbsp[1,]实际上浏览器的操作是toString()转换成字符串的操作,-[1,]是将字符串强制转换为数字。而&nbspIE&nbsp将会返回&nbspNaN,但是遗憾的是&nbspNaN&nbsp并不是一个数字,因为[1,]转换成字符串后的”1,”里面带有逗号。而其他标准浏览器会返回&nbsp-1,这是一个非&nbsp0&nbsp的数字。

你知道,NaN&nbsp转换成&nbspBoolean&nbsp型将返回&nbspfalse,所以-[1,]在&nbspIE&nbsp下将返回&nbspfalse。而任何非&nbsp0&nbsp的数字转换成&nbspBoolean&nbsp型(例如-1),在&nbsp标准浏览器下都将返回&nbsptrue。所以我们得到了一个判定结果,!-[1,]在&nbspIE&nbsp下返回true,而在其他标准浏览器下返回&nbspfalse。也就达到了区分判定&nbspIE&nbsp浏览器的目的。

当然,如前文所说,这个&nbspBug&nbsp其实微软很早就已经知道,但是却一直没有去修复它,所以在未来的&nbsp>&nbspIE8&nbsp的&nbspIE&nbsp浏览器也就不确定是否依旧可以,不过基本上这么多代的&nbspIE&nbsp都没有修复,未来的&nbspIE&nbsp也不太会去修复的样子。
以下是其他的一些区分判定&nbspIE&nbsp浏览器的代码,也可以参考下:
&nbsp

    <script type='text/javascript'>  
    // Option from Dean Edwards:  
    var ie = /*@cc_on!@*/false;  
    // Use the commented line:  
    var ie//@cc_on=1;  
    // Variation (shorter variable):  
    var ie = '\v'=='v';  
    / / Option to Gareth Hayes (former record-holder):  
    var ie = !+"\v1";  
    </script> 


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明JS判断IE浏览器的最简短方法
喜欢 (0)
加载中……