1

尝试使用 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

任何人都可以对此有所了解吗?

4

2 回答 2

4

Internet Explorer 8 和 9不支持 CORS viaXMLHttpRequest,而是通过专有XDomainRequest的。不幸的是,Dōjō 没有考虑到这一点,并尝试通过 加载跨域资源XHR,结果以Access is denied错误结束。

幸运的是,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;
}

然后定义corsProvider调用XHRXDR取决于浏览器:

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/xhr东西dojox.io.xhrPlugins,但我没有经验。dojo/aspect无论如何,为旧的 Dojō 版本实现上述 via 应该非常简单。

于 2013-01-30T14:18:50.673 回答
0

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

另请参阅这些涉及大部分内容的其他 SO 问题:

于 2013-01-30T14:14:49.657 回答