Ruby's Louvre

The Crankiness of Belief achieves Great , not the Trick of Regulation.

判定IE的各个版本

主要使用IE各个阶段实现的一些方法,从中也可以看出IE的发展史。暂时提供到IE4的判定。

var isIE = window.ActiveXObject;
var isVersion = document.querySelectorAll ? 8.0 :
	              window.XMLHttpRequest  ? 7.0 :
	              document.compatMode    ? 6.0 :
	              (0).toFixed                    ? 5.5 :
	              document.getElementById? 5.0 : 
                      document.all                  ? 4.0 :0;

IE5支持getElementById真是一个伟大的创举。新事物的出现总是引起话题,想起我的javascript启蒙书《Javascript DOM编程艺术》,里面的代码总是少不了判定是否支持getElementById……从此IE5走向辉煌,把网景推向地狱的深渊。IE5发布于1998年9月,从此所有主流浏览器都支持getElementById。

网上找到让IE4支持getElementById的代码,javascript的动态解析立功了。

      var ie4=document.all && !document.getElementById;
      if(ie4) {
        document.getElementById = new Function('var expr = /^\\w[\\w\\d]*$/, elname=arguments[0]; if(!expr.test(elname)) { return null; } else if(eval("document.all."+elname)) { return eval("document.all."+elname); } else return null;')
      }

还有getElementsByTagName的实现:

function ie_getElementsByTagName(str) {
 if (str=="*")
  return document.all
 else
  return document.all.tags(str)
}

if (document.all)
 document.getElementsByTagName = ie_getElementsByTagName

很明显如果这些方法得到内置的原生支持,工作效率会大大提升,像jQuery的选择器之于querySelectorAll。IE5可能是当年内置方法与私有实现最多的浏览器,因此它赢得很彻底(抛开捆绑的原因)。内置方法越多,那么对于创建类库的工作就越轻松,从那时开始javascript的类库也多起来了。时至今日,javascript挟以jQuery的东风,越来越受到人重视。加之,西方人对后端javascript的研究,W3C许多惊人的草案的实现,微软加快对标准的支持,谷歌V8的javascript引擎与OS的咄咄逼人,我们一同期待IE9盛世的到来吧。

标签: javascript

posted on 2010-01-16 12:51 司徒正美 阅读(1800) 评论(13) 编辑 收藏

评论

#1楼 2010-01-16 13:00 wispzone      

博主牛x啊,准备好好研究博主的文章,学习js,不知道博主常用的js开发工具有哪些。  回复 引用 查看   

#2楼 2010-01-16 14:12 佛祖      

博主,你那个jQuery源码学习结束了?  回复 引用 查看   

#3楼 2010-01-16 14:57 紫色永恒      

某留言雷煞人也  回复 引用 查看   

#4楼[楼主] 2010-01-16 14:58 司徒正美      

@佛祖
jQuery1.4今天出来了,升级太快,等稳定了再说。
 回复 引用 查看   

#5楼 2010-01-16 17:46 JimLiu      

jQuery的确是让人眼睛一亮的东西,我真的很喜欢这种轻量,就像当年那个x库,不过jQuery的确做的好多了。相比之下那些动辄几百K的UI框架,反而让我觉得是一种累赘。引入jQuery可以做一个很好的decorator  回复 引用 查看   

#6楼 2010-01-16 20:10 sohighthesky      

@wispzone
想跟博主一样牛x的话,何必在意开发工具呢,lz牛x之前肯定是用的记事本了
 回复 引用 查看   

#7楼 2010-01-19 11:15 扑街仔      

学习了。
lz用的判定IE的方法很直接。
不明白有些框架还在根据userAgent来判断
 回复 引用 查看   

#8楼[楼主] 2010-01-19 14:49 司徒正美      

@扑街仔
用userAgent这样看起来专业点吧,其实是很笨的方法,userAgent有许多缺陷,具体可以看《JavaScript高级程序设计》第八章。不过做框架的人对userAgent想必也做了许多研究,当然不情愿放弃这些研究成果。
 回复 引用 查看   

#9楼 2010-01-19 14:50 王祥 @ dot net 驿站      

将来ie9肯定会支持document.querySelectorAll的,所以等ie9推出后,
document.querySelectorAll?8.0:……将会失效。
 回复 引用 查看   

#10楼[楼主] 2010-01-19 15:23 司徒正美      

@王祥 @ dot net 驿站
IE8就支持querySelectorAll……

到时IE9就用另一个方法判断就是,反正到不了下一个分支。
 回复 引用 查看   

#11楼 2010-01-21 09:41 王祥 @ dot net 驿站      

@司徒正美
等到ie9时还需要修改程序代码,这样就在无形中增加了维护的成本。
 回复 引用 查看   

#12楼[楼主] 2010-01-21 13:34 司徒正美      

@王祥 @ dot net 驿站
没办法,javascript就是这样,因此网站每隔一年就要大修一次,创造多少工作机会啊!
 回复 引用 查看   

#13楼 2010-02-22 11:23 msyye      

学习中....  回复 引用 查看