现在的位置: 首页 > 综合 > 正文

判断浏览器的类型

2013年10月22日 ⁄ 综合 ⁄ 共 1119字 ⁄ 字号 评论关闭

if(!-[1,] && !window.XMLHttpRequest) {
  window.location.href = 'http://www.website.com/IE6.html';
 }

这是一个判断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!

<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>

在JS里,window是最顶级对象(除了Object,Function...那些之外),它代表了一个窗体。而window.XMLHttpRequest代表的是window的一个属性。这个是用来区分浏览器的,因为在firefox,opera,safiar,IE7.0,IE8.0(我所知道的window对象有这个属性的浏览器)这些浏览器中,window是有XMLHttpRequest这个属性的,而IE6.0,5.5都是没有的,IE6.0或5.5是没有这个属性的,使用window.ActiveXObject替代。当然前者和后者的XMLHttpRequest对象生成方式也是不一样的。

 

抱歉!评论已关闭.