function getXDOC(){
//W3C native Object
if (window.XMLHttpRequest)return new XMLHttpRequest();
//IE 4.0 fallback [try..catch]
var progIDs=[];
progIDs[0]='Msxml2.XMLHTTP.3.0';
var i = 0;
/*@cc_on
progIDs = [ 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0']; //6.0 is better of 3.0
for (; i < progIDs.length; i++) {
try{
@*/
if (window.ActiveXObject){
var xmlDOM = new ActiveXObject(progIDs[i]);
xmlDOM.setProperty("SelectionLanguage", "XPath");//because 3.0 default is XSLPattern
return xmlDOM;
}
/*@cc_on
}
catch (ex) {
}
}
@*/
return null;
}
Enjoy ;)
Ps. stay tuned for a corrected version..
Update:
http://mykenta.blogspot.com/2006/11/latest-version-of-getxdoc-dont-work-in.html
8 commenti:
// this is really bad, a global variable
// and a double operation ...
progIDs=[];
progIDs[0]='Msxml2.DOMDocument.3.0';
// change with
var progIDs=['Msxml2.DOMDocument.3.0'];
// however, I wonder why You like conditional comments so much, they are a bad practice for me ...
// I think this function should be better
function getXHR(){
function IE(AX){
var d = "Msxml2.DOMDocument.",
v = parseInt(navigator.userAgent.replace(/(^.+)MSIE (\d)(.+$)/i, "$2")),
XHR = AX && v > 4 ? new ActiveXObject(v > 5 ? d + "6.0" : d + "3.0") : null;
if(v < 6)
XHR.setProperty("SelectionLanguage", "XPath");
return XHR;
};
return window.XMLHttpRequest ? new XMLHttpRequest : IE(window.ActiveXObject);
};
Ok, thank's I correct that global var oversight.
I prefer cc to sniff for obviously reason.
I like it because for other browser are just comment and don't slow down the application.
I prefer cc to sniff for obviously reason.
because they are not standard ?
because one day some browser should change and every conditional comment script should be compromised ?
because there's always a code way to don't use conditional comment but you don't want to use them ?
Maybe You mean for obviously reason, don't use conditional comments hack ... as every hack is not a good practice.
btw, in your method you just assume that IE 5 don't have the "6.0" version.
That's wrong .
Wait, you see, for me CC are absolutly
standard in a javascript file, because they are just comment for any browser but IE.
Sniffing is bad because a browser can fake it's signature or an upgrade can change it.
..
because one day some browser should change and every conditional comment script should be compromised ?
..
no, it won't happen.
..Here I use it only because IE4 don't support try..catch .
function getXHR(){
function IE(AX){
var d = "Msxml2.DOMDocument.",
v = parseFloat(navigator.userAgent.replace(/(^.+)MSIE (\d+\.\d+)(.+$)/i, "$2")),
XHR = AX && v > 4 ? new ActiveXObject(v > 5 ? d + "6.0" : d + "3.0") : null;
if(v < 5.5)
XHR.setProperty("SelectionLanguage", "XPath");
return XHR;
};
return window.XMLHttpRequest ? new XMLHttpRequest : IE(window.ActiveXObject);
};
oooops ... I meant
function getXHR(){
function IE(AX){
var d = "Msxml2.DOMDocument.",
v = parseFloat(navigator.userAgent.replace(/(^.+)MSIE (\d+\.\d+)(.+$)/i, "$2")),
XHR = AX && v > 4 ? new ActiveXObject(v >= 5.5 ? d + "6.0" : d + "3.0") : null;
if(v < 5.5)
XHR.setProperty("SelectionLanguage", "XPath");
return XHR;
};
return window.XMLHttpRequest ? new XMLHttpRequest : IE(window.ActiveXObject);
};
damn copy and paste !!!
this is (I hope) the function
function getXHR(){
function IE(AX){
var d = "Msxml2.DOMDocument.",
v = parseFloat(navigator.userAgent.replace(/(^.+)MSIE (\d+\.\d+)(.+$)/i, "$2")),
XHR = AX && v >= 5 ? new ActiveXObject(v >= 5.5 ? d + "6.0" : d + "3.0") : null;
if(v < 5.5)
XHR.setProperty("SelectionLanguage", "XPath");
return XHR;
};
return window.XMLHttpRequest ? new XMLHttpRequest : IE(window.ActiveXObject);
};
however, it's not so different from my "old" Ajax Guide solution :)
Posta un commento