xmlextras.js
Summary
Wrapper to make working with XmlHttpRequest and the
DOM more convenient (cross browser compliance).
this code is taken from
http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
Version: $Revision: 437 $
Author: Stefan Strigler steve@zeank.in-berlin.de
function XmlHttp() {}
XmlHttp.create = function () {
try {
if (window.XMLHttpRequest) {
var req = new XMLHttpRequest();
if (req.readyState == null) {
req.readyState = 1;
req.addEventListener("load", function () {
req.readyState = 4;
if (typeof req.onreadystatechange == "function")
req.onreadystatechange();
}, false);
}
return req;
}
if (window.ActiveXObject) {
return new ActiveXObject(XmlHttp.getPrefix() + ".XmlHttp");
}
}
catch (ex) {}
throw new Error("Your browser does not support XmlHttp objects");
};
XmlHttp.getPrefix = function() {
if (XmlHttp.prefix)
return XmlHttp.prefix;
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
var o;
for (var i = 0; i < prefixes.length; i++) {
try {
o = new ActiveXObject(prefixes[i] + ".XmlHttp");
return XmlHttp.prefix = prefixes[i];
}
catch (ex) {};
}
throw new Error("Could not find an installed XML parser");
};
function XmlDocument() {}
XmlDocument.create = function (name,ns) {
name = name || 'foo';
ns = ns || '';
try {
var doc;
if (document.implementation && document.implementation.createDocument) {
doc = document.implementation.createDocument(ns, name, null);
if (doc.readyState == null) {
doc.readyState = 1;
doc.addEventListener("load", function () {
doc.readyState = 4;
if (typeof doc.onreadystatechange == "function")
doc.onreadystatechange();
}, false);
}
} else if (window.ActiveXObject) {
doc = new ActiveXObject(XmlDocument.getPrefix() + ".DomDocument");
}
if (!doc.documentElement || doc.documentElement.tagName != name ||
(doc.documentElement.namespaceURI &&
doc.documentElement.namespaceURI != ns)) {
try {
if (ns != '')
doc.appendChild(doc.createElement(name)).
setAttribute('xmlns',ns);
else
doc.appendChild(doc.createElement(name));
} catch (dex) {
doc = document.implementation.createDocument(ns,name,null);
if (doc.documentElement == null)
doc.appendChild(doc.createElement(name));
if (ns != '' &&
doc.documentElement.getAttribute('xmlns') != ns) {
doc.documentElement.setAttribute('xmlns',ns);
}
}
}
return doc;
}
catch (ex) { alert(ex.name+": "+ex.message); }
throw new Error("Your browser does not support XmlDocument objects");
};
XmlDocument.getPrefix = function() {
if (XmlDocument.prefix)
return XmlDocument.prefix;
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
var o;
for (var i = 0; i < prefixes.length; i++) {
try {
o = new ActiveXObject(prefixes[i] + ".DomDocument");
return XmlDocument.prefix = prefixes[i];
}
catch (ex) {};
}
throw new Error("Could not find an installed XML parser");
};
if (typeof(Document) != 'undefined' && window.DOMParser) {
Document.prototype.loadXML = function (s) {
var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
while (this.hasChildNodes())
this.removeChild(this.lastChild);
for (var i = 0; i < doc2.childNodes.length; i++) {
this.appendChild(this.importNode(doc2.childNodes[i], true));
}
};
}
if (window.XMLSerializer &&
window.Node && Node.prototype && Node.prototype.__defineGetter__) {
XMLDocument.prototype.__defineGetter__("xml", function () {
return (new XMLSerializer()).serializeToString(this);
});
Document.prototype.__defineGetter__("xml", function () {
return (new XMLSerializer()).serializeToString(this);
});
Node.prototype.__defineGetter__("xml", function () {
return (new XMLSerializer()).serializeToString(this);
});
}
Documentation generated by
JSDoc on Tue Jun 17 11:28:05 2008