JavaScript 判定 IE 浏览器方法

  • 格式:doc
  • 大小:31.00 KB
  • 文档页数:2

武汉神马网站建设
JavaScript 判定IE 浏览器方法
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>
武汉神马网站建设。