注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

★柳暗花明★

似水年华,诠释着无力的永恒······

 
 
 

日志

 
 

【引用】JS判断IE浏览器的最简短方法  

2011-10-20 14:44:05|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
IE浏览器不管是什么版本,总是跟Web标准有些不太兼容。对于代码工作者来说,自然是苦不堪言,为了考虑IE的兼容题目,不管是写 CSS 还是 JS,往往都要对 IE 特别看待,这就少不了做些判定。本文不商讨怎么区分 IE 的样式,仅是 JS 判定 IE 浏览器。 
    这个至今世界上最短的 Javascript 判定 IE 浏览器的方法来自俄罗斯!它已经在各版本的 IE 以及至今其他盛行的浏览器上经过测试,基于 IE 的 Bug,微软固然已经意识到,但是从来无订正过。
<script type=’text/javascript’> 
var ie = !-[1,]; 
alert(ie); 
</script> 
以上代码运行成果:IE 下返回true,其他标准浏览器返回false。!-[1,],仅仅只有 6 bytes!
不过如果反过来判定,标准浏览器返回 true 而 IE 返回 false的话,则可以再缩短一个byte。
<script type=’text/javascript’> 
notIe = -[1,]; 
if(-[1,]){ 
// 标准浏览器代码 
}else{ 
// IE Only的代码 

</script> 
看完了这些,你们是不是很奇怪这些是怎么运行的?请继续看下文。
这个 Bug 产生的原因是 IE 会添加一个空数组元素到数组元素的总数里。
[1,]. Length标准浏览器会返回 1 (基于标准的 ECMAscript ,在数组最后的逗号”,”会被忽略,这是为了方便在一列里显露以及主动天生等),但是 IE 会返回 2。当你打印这个数组的时候 IE 将会返回 “1, “,也就是两个元素,而其他标准浏览器将会返回 “1″。
这很轻易验证,比如在 IE 和 FF中运行以下代码:
<script type=’text/javascript’> 
alert([,]==’,’); 
//这是8个字符判定IE 
</script> 
[1,]实际上浏览器的操纵是toString()转换成字符串的操纵,-[1,]是将字符串强迫转换为数字。而 IE 将会返回 NaN,但是可惜的是 NaN 并不是一个数字,由于[1,]转换成字符串后的”1,”里面带有逗号。而其他标准浏览器会返回 -1,这是一个非 0 的数字。
你知道,NaN 转换成 Boolean 型将返回 false,所以-[1,]在 IE 下将返回 false。而任何非 0 的数字转换成 Boolean 型(例如-1),在 标准浏览器下都将返回 true。所以我们得到了一个判定成果,!-[1,]在 IE 下返回true,而在其他标准浏览器下返回 false。也就到达了区分判定 IE 浏览器的目标。
当然,如前文所说,这个 Bug 实在微软很早就已经知道,但是却一直无去修复它,所以在未来的 > IE8 的 IE 浏览器也就不确定是否依旧可以,不过基础上这么多代的 IE 都无修复,未来的 IE 也不太会去修复的样子。
以下是其他的一些区分判定 IE 浏览器的代码,也可以参考下:
<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>
  评论这张
 
阅读(524)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017