javascript - 这些 ActiveXObject 和 XMLHttpRequest 检查是否适用于 IE6 以外的任何其他浏览器?

标签 javascript ajax xmlhttprequest internet-explorer-6

我在 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;
    };
}

}

最佳答案

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

因此,几乎任何不支持 XMLHttpRequest 的旧版浏览器都会落入尝试填充 XMLHttpRequest API 的 if block 中。并不是说有很多人在使用它们,但我确信它们就在那里。 (例如,特别是旧版本的 FF、Opera、Safari……可能是不太知名的移动浏览器……之类的事情。)

顺便说一句,Microsoft's XMLHttpRequest documentation推荐使用以下代码片段进行 x 平台 XMLHttpRequest 构建,我推荐:

function getXMLHttpRequest() 
{
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
}

关于javascript - 这些 ActiveXObject 和 XMLHttpRequest 检查是否适用于 IE6 以外的任何其他浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14462286/

相关文章:

javascript - Flask 使用 AJAX 上传文件和按钮提交不起作用

ajax - 加载 cometd /服务器推送iframe时,停止浏览器 “throbber of doom”

javascript - 如何拦截包括表单提交在内的所有http请求

javascript - 单击“添加到购物车”时如何检查产品是否已在购物车中并且不重复它(JavaScript localStorage Cart)

javascript - 仅使用选择名称和选项值来识别选择选项

javascript - NodeJS 中将字符串转换为对象

Javascript如何提交表单?

AngularJS 在 POST 上从 https 请求 http

ajax - 发送带有 Header 和 FormData 的 XMLHttpRequest

javascript - 根据密码在javascript中生成RSA key 对