Browser-independent XML load with Javascript

XML data is, in a word, awesome. It's standardized, it's well-formatted, and there are XML parsing methods in nearly every major programming language--including Javascript. However, when using Javascript, the nasty problem of "browser agnosticism" comes into play: a method that works in Firefox may not (read: won't) work in Internet Explorer; and both methods may fail for WebKit (Safari, Chrome, etc.).

The next several articles detail browser-agnostic functions for loading and manipulating XML/XSL data. For this article, we start with loading the XML document:

Javascript code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function loadXML(dname)  
{  
    var xmlDoc;

    // IE ActiveX  
    try {  
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");  
    } catch(e) {  
        // Mozilla/Firefox, Opera (Also WebKit fallthrough)  
        try {  
            xmlDoc = document.implementation.createDocument("", "", null);  
        } catch(e) {  
            // Error  
            alert("Cannot instantiate XMLDOM object\\n\\nError:\\n" + e.message);  
            return(false);  
        }  
    }

    try {  
        xmlDoc.async = false;  
        xmlDoc.load(dname);  
        return(xmlDoc);  
    } catch(e) {  
        // WebKit (Safari, Chrome) - AJAX fallback  
        try {  
            var xhr = new XMLHttpRequest();  
            xhr.open("GET", dname, false);  
            xhr.send(null);  
            xmlDoc = xhr.responseXML;  
            if(!xmlDoc) return(false);  
            return(xmlDoc);  
        } catch(e) {  
            alert("Cannot instantiate XMLDOM object\\n\\nError:\\n" +  e.message);  
            return(false);  
        }  
    }  
}

True, you could use an AJAX call instead of creating an XMLDOM object (or using createDocument)... but the example serves a second purpose for demonstrating XMLDOM instantiation. Note: As far as I can tell, instantiating an XML document object without XMLHttpRequest() is not possible in WebKit browsers.

Comments !