Category: Scripting
A note about synchronous xmlhttp requests and Firefox
By Chris on Jun 5, 2007 | In Development & Design, Scripting, Bugs, "Features" & Things Not Right | 6 feedbacks »
Since I just spent the better part of Friday debugging this problem and then the better part of Friday night Googling for a work around, it's worth noting that there is a "bug" in the Firefox implimentation of the xmlHTTPRequest object when using it for synchronous calls (i.e. the rest of the script pauses and waits for the request to complete, unlike typical asynchronous AJAX calls). When using the xmlhttp object in a synchronous fashion, Firefox does not process the onreadystatechange handler. Thus, any libraries that are dependant on this (for running post processing functions for example) will fail to work under these conditions. Interestingly, having the Firebug extension installed causes the object to behave properly. So a secondary note is to always test your apps in a "clean" instance of Firefox.
Here are the details that I came across, along with a work around: Lukav’s Weblog » Blog Archive » Firefox firebug and synchronos calls problem.
I've also set up a set of tests to demonstrate the problem. Try in both Firefox and IE to see the differences.
Greasemonkey Scripts I really can't live without
By Chris on Apr 25, 2007 | In Scripting, Software | 2 feedbacks »
I Firefox, therefore I Greasemonkey. Here are two user scripts for GM that I really can't live without.
- Greased Lightbox - Adds an overlay type of effect to any direct image link. Great for use on Google Images or any other page with mainly links to images. Saves you from having to click "Back" a million times...
- Check Range - Click then Shift-Click to check or uncheck a range of checkboxes in a form. Great for use in webmail clients like Hotmail or Imp.
How 'bout you side burns? Got any good Greasemonkey script recommendations?
IE getElementById Bug Strikes Again
By Chris on Apr 5, 2007 | In Standards, Scripting, Programming, Bugs, "Features" & Things Not Right | 5 feedbacks »
<textarea id="description" name="description">Here is some text</textarea>
<script type="text/javascript">
var myElement = document.getElementById('description');
alert(myElement.value.length); //alert: 17
</script>
Every time I tried to execute that code in IE it would complain that 'value.length' is null or not an object.
After a whole crap load of debugging I finally tracked it down to the fact that IE was actually referencing the <meta name="description"> tag in the head section of the page. Yeah, see even though the function is getElementById, IE still thought I meant the element with the name attribute equal to "description". Or as my brother put it in a comment to the original post (before the comments were wiped in the great Data Loss of '06), maybe IE thought I was calling the getJustAboutAnythingIFeelLike() function...
Damn you IE for making me have to change my ID attributes to suite your leisurely implementation of the DOM! The Hows and Whys of Degradable Ajax
By Chris on Oct 4, 2005 | In Development & Design, Scripting, Programming | Send feedback »
I just read through ParticleTree.com’s write up on The Hows and Whys of Degradable Ajax. The article describes a method of adding AJAX functionality incrementally in order to offer a complete backwards compatible application. The example application demonstrates this nicely (best to use Firefox with the Web Developers toolbar so that you can easily disable JavaScript while you test it - just remember to refresh after re-enabling/disabling it)
document.getElementById() may return incorrect element in IE and Opera
By Chris on Aug 29, 2005 | In Scripting, Programming, Bugs, "Features" & Things Not Right | Send feedback »
I came across a bug in Internet Explorer whereby the document.getElementById() function may return an element with a name attribute equal to the id that is specified. This can cause unexpected results.
According to the W3C’s DOM Level 2 Core Specification:
getElementByIdintroduced in DOM Level 2- Returns the
ElementwhoseIDis given byelementId. If no such element exists, returnsnull. Behavior is not defined if more than one element has thisID.Note: The DOM implementation must have information that says which attributes are of type ID. Attributes with the name “ID” are not of type ID unless so defined. Implementations that do not know whether attributes are of type ID or not are expected to return
null.Parameters
elementIdof typeDOMString- The unique
idvalue for an element.Return Value
ElementThe matching element. No Exceptions
http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId
However, for the browsers that failed the test, it appears that their implimentation of getElementById returns the first element where the ID or name attribute is equal to the specified ID.
This bug was tested against the following browsers:
- IE 6.0 sp2: failed
- IE 5.5: failed
- IE 5.01: failed
- Netscape 7.2: passed
- Netscape 6: passed
- Mozilla 1.7.3: passed
- Opera 8.2: failed
- Firefox 1.0.6: passed
For instance, the following code should produce an alert with “foo=foo; bar=bar”. However, the browsers that fail the test actually return “foo=foo; bar=foo”.
<form name="form1" id="form1" method="get" action="javascript: void(0)">
<input name="bar" type="text" id="foo" value="foo" /><br />
<input name="foo" type="text" id="bar" value="bar" readonly="readonly" /><br />
<input type="button" name="Button" value="Test" onclick="alert(’foo=’+document.getElementById(’foo’).value+’; bar=’+document.getElementById(’bar’).value)" /><br />
</form>
Reported at http://www.quirksmode.org/bugreports/ (permalink)
Noted on http://channel9.msdn.com/wiki/ (Update 2007-04-04: my note has since been replaced by several others