Blog


Object getElementsByTagName IE7 Bug

So here's a fun bug to keep you entertained this weekend. Personally, this is the first purely-JavaScript bug that I've seen in IE7 (More due to the lack of anything changing than the quality of the code.)

Summary:
When accessing the .all or .getElementsByTagName("*") properties on the DOM representation of an <object> element, the resulting NodeSet will always be empty.

Proof of Concept:
HTML:

<object>
  <param name="name" value="value"/>
  <param name="name2" value="value2"/>
  <param name="name3" value="value3"/>
</object>

JavaScript:

var obj = document.getElementsByTagName("object")[0];
// => <object/>
obj.all
// => []
obj.getElementsByTagName("*")
// => []
obj.getElementsByTagName("param")
// => [ <param/>, <param/>, <param/> ]
obj.firstChild
// => <param/>
 

Andrea has done some fantastic work in tracking this bug down and providing a fix for it.

So far, my quick-and-dirty kludge is just to replace "*" with "param" and hope that the user is actually using an object to hold params, and not some other crazy combination.

Which reminds me - has anyone ever seen an example of an <object> element containing non-param elements on a real, live, web page - somewhere in the wild? The HTML spec says that the <object> element can contain any HTML, but that sounds a little bit too crazy for my tastes.

Tags: ie7, browsers, bugs, object, getelementsbytagname

Current Projects

jQuery JavaScript Library

jQuery

Comprehensive DOM, Event, Animation, and Ajax JavaScript Library.

Recent Projects

Pro JavaScript Techniques

JavaScript Book

The best techniques for professional JavaScript. Published by Apress.


Hosting provided by the cool dudes at Engine Yard.