XML DOM hacking in MSIE: halp!
Jun. 1st, 2007 11:25 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Righto, I just sacrificed a couple of hours on the altar of trying to get shit to work in MSIE. On the plus side, I think I can eliminate one of the third-party libraries I've been using; MSIE was barking at it, and I find that I can do the same thing it was doing using Prototype, which the application already depends on.
On the minus side, MSIE's XML API eludes me. Consider this code snippet. Given
The initial
Another good reason to drop the library I am dropping? It contains lines of code like this:
Holy hannah. That's no way to make friends.
On the minus side, MSIE's XML API eludes me. Consider this code snippet. Given
xml_request
, an XMLHttpRequest
object:
alert(xml_request.responseText); // This prints the correct thing.
var xml_doc = xml_request.responseXML;
var root_element = xml_doc.documentElement;
if (root_element) {
alert("I have a document element. I am a sane browser!");
}
else {
alert("I have no document element. I must be MSIE. Fuck.");
}
The initial
alert()
makes me sure that MSIE (as well as any other browser) is in fact reading the XML. I just can't do a damn thing with it after that; every attempt to peek into any DOMmish properties of xml_doc
returns null.xml_doc.firstChild
and equivalent statements all fail equally (while succeeding on sane browsers). Wha?Another good reason to drop the library I am dropping? It contains lines of code like this:
MWJ_ldD[MWJ_ldD.length-1].onreadystatechange = new Function( 'if( MWJ_ldD['+(MWJ_ldD.length-1)+'].readyState == 4 ) { '+oFunct+'(MWJ_ldD['+(MWJ_ldD.length-1)+'].load?MWJ_ldD['+(MWJ_ldD.length-1)+']:MWJ_ldD['+(MWJ_ldD.length-1)+'].responseXML); }' );
Holy hannah. That's no way to make friends.
no subject
Date: 2007-06-02 04:14 am (UTC)no subject
Date: 2007-06-02 06:49 am (UTC)no subject
Date: 2007-06-02 06:51 am (UTC)no subject
Date: 2007-06-02 12:34 pm (UTC)no subject
Date: 2007-06-02 03:50 pm (UTC)no subject
Date: 2007-06-02 12:46 pm (UTC)Is it possible that calling xml_request.responseText empties the xml_request object, and that subsequently calling .responseXML therefore returns an empty XML document?
no subject
Date: 2007-06-02 03:43 pm (UTC)no subject
Date: 2007-06-02 03:38 pm (UTC)I found a few articles on JS and XML that have techniques that might be helpful, but they aren't anything the most casual googler couldn't dig up. There is this, though, if you don't have something like it (it ain't Firebug but it's pretty handy): JavaScript Shell for IE
no subject
Date: 2007-06-02 03:45 pm (UTC)no subject
Date: 2007-06-02 04:05 pm (UTC)no subject
Date: 2007-06-02 04:23 pm (UTC)I have yet to come to a place where it's worth sacrificing maintainability for optimization. Or anything else.
I'm not saying there is no such place... but I haven't been there yet, if so.
i have
Date: 2007-06-03 01:03 am (UTC)But in general, yeah, gzip compression. I did some testing on $JOB's website (upwards of ~40k unique visitors per day at peak), and enabling gzip for HTML cut total bandwidth utilization by 55%.
I do admit to using HTML/CSS stripping tools on outbound opt-in emails. Shaving a few kb does seem to make a difference. This means I have also sent HTML format emails, for which I am deeply shamed.
Re: i have
Date: 2007-06-03 04:07 pm (UTC)no subject
Date: 2007-06-02 03:58 pm (UTC)Does xml_doc.nodeType evaluate to 9? It should.
Does going straight to xml_doc.childNodes yield anything fruitful?
Surprisingly, a look at the Prototype API docs doesn't reveal any special sauce for the responseXML property. You'd think that they had a basic browser incompatibility like this one handled.
no subject
Date: 2007-06-02 05:55 pm (UTC)AHAHAHA you're funny!
no subject
Date: 2007-06-03 05:08 am (UTC)no subject
Date: 2007-06-03 01:46 pm (UTC)no subject
Date: 2007-06-06 03:28 am (UTC)I'm pretty sure that xml_doc.firstChild isn't actually valid.
no subject
Date: 2007-06-09 09:11 pm (UTC)