Dojo 跨域 - 访问被拒绝



我在尝试跨域使用 dojotoolkit 时遇到了问题。

我正在 apache Access-Control-Allow-OriginAccess-Control-Allow-Headers 中设置标头,这允许它在除 IE8 和 IE9 以外的所有浏览器中正常工作。我收到"访问被拒绝"消息的位置。

Line: 711
Character: 3
Code: 0
Error Message: Access is denied.
URL: http://remote.site.net/includes/dojotoolkit/dojo/_base/xhr.js

谁能对此有所了解?

Internet Explorer 8 和 9 不支持通过 XMLHttpRequest 的 CORS,而是通过专有XDomainRequest。不幸的是,Dōjō 没有考虑到这一点,并尝试通过 XHR 加载跨域资源,以"访问被拒绝"错误结束。

幸运的是,Dōjō 提供了强大的dojo/request/registry,允许您修改此行为:

定义使用XDomainRequest获取资源的 XDomainRequest 提供程序

function xdr(url, options) {
    var def = new Deferred();
    var xdr = new XDomainRequest();
    if (xdr) {
        xdr.onload = function(e) {
            def.resolve(xdr.responseText);
        }
        xdr.open(options.method, url);
        xdr.send();
        return def;
    }
    def.reject(new Error('XDomainRequest not supported.'));
    return def;
}

然后定义根据浏览器调用XHRXDRcorsProvider

function corsProvider(url, options) {
    if(window.XDomainRequest) {
        return xdr(url, options);
    }
    return xhr(url, options);
}

注册corsProvider以处理跨域请求:

var url = "http://cors-test.appspot.com/test";
var handle = request.register(url, corsProvider);

现在请求跨域资源也应该在IE中工作:

request.get(url).then(function(response) {
    console.log(response);
});

查看实际操作:http://jsfiddle.net/phusick/LZZhs/

这适用于道城 1.8+,因为dojo/request .如果您需要相同的dojo/_base/xhrdojox.io.xhrPlugins,但我没有经验。无论如何,通过dojo/aspect为旧版道条版本实现上述内容应该非常简单。

IE8和IE9通常不能很好地处理这些东西,除非你开始使用它们单独的XDomainRequest对象。 您使用什么来启动请求?

另请参阅处理其中大部分内容的其他 SO 问题:

  • 带有 jQuery 和 XDomainRequest 的 CORS in IE8/9
  • IE8/IE9 中的跨源标头

相关内容

  • 没有找到相关文章

最新更新