与jQuery和XDomainRequest在IE8 / 9 CORS(CORS with jQue

2019-06-17 11:22发布

更新:我强烈建议不投资任何时间XDomainRequest,因为它是一个非常糟糕的实现有很大的局限性。 它基本上只有真正适用于GET请求非SSL服务器,所以你还不如用JSONP或什么的。


我使用CORS调用一个跨域API,但是Internet Explorer被给予的问题。 CORS应该在IE8和IE9可以通过XDomainRequest对象,但我不能得到的东西的工作..

JQuery的拒绝为XDomainRequest提供原生支持,但也有一些jQuery插件都建议增加这一支持。 本课题提出两个这样的插件: jQuery.XDomainRequest.js和xdr.js ,已上报工作。 据我所知,该插件会自动覆盖的行为jQuery.ajax 。 我发现了另一个插件这里 。

我把与相应的插件有点演示页面jQuery.XDomainRequest和XDR和jquery.ie.cors执行AJAX请求启用CORS服务器。 该页面在Chrome和Firefox的工作,但IE8 / 9立即抛出一个权限被拒绝错误(甚至发出请求之前)。 此MSDN交建议增加另一个处理程序xhr.onprogress = function() {}; 但我想这和它不工作要么。

任何线索我在做什么错? 我还与IE8现在使用MS虚拟服务器进行测试,但它有完全相同的问题。

编辑:行,所以我想通了,问题的一部分是,我是用POST通过HTTPS。 显然XDomainRequest不允许通过HTTPS CORS。 我可以切换到HTTP但我真的需要POST。

EDIT2:请参见GitHub上这个问题对于这个故事的结尾。 事实证明,使用HTTP POST的情况下,xDomainRequest只能编码请求主体(参数)作为text/plain 。 这几乎使毫无价值,因为每个人都使用application/x-www-form-urlencoded或者multipart/form-data

Answer 1:

支持POST方法,并进行跨域https://开头请您调用页面也需要加载通过https。 这是最好的文章中,我发现了详细解释XDomainRequest的这些和其他限制:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx



Answer 2:

我写了一个代理服务器,如果使用IE9或更低,这将优雅降级到代理。 您不必如果您正在使用ASP.NET做任何改动你的代码。

将该溶液分为两个部分。 第一个是一个jquery脚本挂钩到jQuery的AJAX处理。 它会自动调用Web服务器如果跨域请求时,浏览器是IE:

$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
    if (!window.CorsProxyUrl) {
        window.CorsProxyUrl = '/corsproxy/';
    }
    // only proxy those requests
    // that are marked as crossDomain requests.
    if (!options.crossDomain) {
        return;
    }

    if (getIeVersion() && getIeVersion() < 10) {
        var url = options.url;
        options.beforeSend = function (request) {
            request.setRequestHeader("X-CorsProxy-Url", url);
        };
        options.url = window.CorsProxyUrl;
        options.crossDomain = false;
    }
});

在您的Web服务器,你必须接收请求,您可以通过值X-CorsProxy-Url http头,做一个HTTP请求,最后返回结果。

我的博客文章: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/



Answer 3:

对于CORS在IE8 / 9请求您可以使用jQuery插件jQuery的传输XDR



文章来源: CORS with jQuery and XDomainRequest in IE8/9