Internet Explorer 8 および 9は CORS を介してサポートしていませんXMLHttpRequest
が、独自の を介してサポートしていXDomainRequest
ます。残念ながら、Dōjo はこれを考慮せず、 を介してクロスドメイン リソースをロードしようとしますが、これはAccess is deniedエラーXHR
で終了します。
さいわい、Dōjo には強力なが用意されており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/
これは Dojo 1.8+ に適用されdojo/request
ます。dojo/_base/xhr
同じものが必要な場合はありますがdojox.io.xhrPlugins
、私は経験がありません。dojo/aspect
とにかく、以前の Dojo バージョンに前述のビアを実装するのは非常に簡単です。