IE8 的 又一致命bug 导致崩溃 . 不知道是不是我第一个发现?

ie8 支持了新的方法 element.querySelectorAll 方法 支持 css2的 选择器

这功能很好很强大 但却有致命问题 他返回的对象 不是象 document.getElementsByName  ByTagName 那样 返回的一个 普通的NodeList对象或

ie8叫 [object HTMLCollection] 对象 而是返回一个 叫 [object staticNodeList] 的对象

问题就出在他身上

我写了一个 通用的 对象转数组的 方法

所以 要判断一下 传入的对象是不是 nodeList 集合对象. 

但当传入的对象是  [object HTMLCollection] 对象时.我们 不能 用 obj=='[object HTMLCollection]';来做判断  这个obj 我 唯一 能成功测试的就是  'length' in obj  这样可以不出问题

我测试了下 obj对象似乎没有从 Object.prototype那里继承到 toString方法 所以

我 obj.toString()=='' 会说对象不支持该属性或方法. 

如果我  'obj=='[object HTMLCollection]' 直接崩溃 或者 obj.constructor也会崩溃

我们知道 ie6和ie7 一般的 nodeList对象是不具备 constructor 属性的 . 所以

我的逻辑本来是这样 :

if(isNumber(obj.length)&& (obj)== '[object HTMLCollection]' || obj == '[object staticNodeList]' || obj.constructor === undefined)) 

但是当对象 是 staticNodeList时会崩溃.. 搞的我也跟着彻底崩溃了

我们简单点

for (var o in document.querySelectorAll('*'));

崩溃拉!!!!!

 

posted @ 2009-04-08 14:35  Franky  阅读(4360)  评论(12编辑  收藏  举报