function CreateXHR() {
/*
由于XMLHttpRequest对象最早是由微软的MSXML库中的一个ActiveX实现
的,并且在ie中有MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0三个版本
后来又有了XHMHttpRequest对象直接实现,所以为了保持兼容,在创建XMLHt
tpRequest对象之前需要对浏览器支持的创建方法进行检验
*/
// 检验是否支持XMLHttpRequest对象
if (typeof XMLHttpRequest != "undefined") {
// 如果支持,直接用这个构造函数创建一个XMLHttpRequest对象并返回
return new XMLHttpRequest();
// 如果不支持,判断是否支持ActiveXObject
} else if (typeof ActiveXObject != "undefined") {
// 如果支持,则循环判断看最高支持哪个版本
/* arguments.callee.activeXString != "string"中arguments.callee指向的是这个函数对象
本身,即CreateXHR这个函数对象,然后给这个函数对象加了一个属性activeXString,
用来存最高支持的版本号
*/
// 条件判断中确定CreateXHR这个函数对象的属性activeXString值不为string
if (typeof arguments.callee.activeXString != "string") {
// 数组从前到后依次判断高版本到低版本
let versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
i, len;
for (i = 0, len = versions.length; i < len; i++) {
try {
// 先尝试建立高版本的ActiveXObject对象,如果报错则直接跳过后面的代码
new ActiveXObject(versions[i]);
// 前面没报错则将版本号存在函数对象的属性activeXString中,并跳出循环,保证这个版本
号是能支持的最高版本
arguments.callee.activeXString == versions[i];
break;
} catch (e) {
new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
// 利用函数对象的属性activeXString创建ActiveXObject对象,并返回
return new ActiveXObject(arguments.callee.activeXString);
} else {
// 如果都不支持,则报错no XHR object available(翻译为XHR不被支持)
throw new Error("no XHR object available");
}
}
如何兼容性的创建XMLHttpRequest对象
最新推荐文章于 2022-03-02 16:36:32 发布