2

我在 IE10 中为 plUpload 插件遇到了一个奇怪的错误,我发现如果我在我们的项目中删除此代码,一切正常。谁能告诉我这是做什么的以及是否可以安全删除?看起来它只适用于IE6?我对吗?

var progids = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
var progid = null;


if (typeof ActiveXObject != "undefined") {
var ie7xmlhttp = false;
if(typeof XMLHttpRequest == "object") {
    try {
        var o = new XMLHttpRequest();
        ie7xmlhttp = true;
    } catch (e) {
    }
}
if(typeof XMLHttpRequest == "undefined" || !ie7xmlhttp) {
    XMLHttpRequest = function() {
        var xmlHttp = null;
        if(!BlocAjax.noActiveX) {
            if(progid != null) {
                return new ActiveXObject(progid);
            }
            for(var i=0; i<progids.length && xmlHttp == null; i++) {
                try {
                    xmlHttp = new ActiveXObject(progids[i]);
                    progid = progids[i];

                }catch(e){}
            }
        }
        if(xmlHttp == null && MS.Browser.isIE) {
            return new .IFrameXmlHttp();
        }
        return xmlHttp;
    };
}

}

4

1 回答 1

3

是的,我相信还有其他浏览器。您显示的检查试图通过查找支持 ActiveX (IE*) 但不支持 XMLHttpRequest (IE6-) 的浏览器来检测 IE。但是,如果 ie7xmlhttp 标志可能被初始化为 null 或未定义,那么任何不支持 XMLHttpRequest 的非 IE 浏览器都将被类似处理,因为if(typeof XMLHttpRequest == "undefined" || !ie7xmlhttp) {在这些情况下都是如此。

因此,几乎所有不支持 XMLHttpRequest 的旧版浏览器都会陷入if尝试填充 XMLHttpRequest API 的障碍。并不是说有很多人在使用它们,但我确信它们就在那里。(例如,特别是旧版本的 FF、Opera、Safari……可能是鲜为人知的移动浏览器……诸如此类。)

顺便说一句,微软的 XMLHttpRequest 文档推荐这个代码片段用于 x 平台 XMLHttpRequest 构造,我推荐:

function getXMLHttpRequest() 
{
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
}
于 2013-01-22T19:37:28.960 回答