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
调用XHR
或XDR
取决于浏览器:
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 应该非常简单。