1

dojotoolkit クロスドメインを使用しようとすると問題が発生します。

私はApacheAccess-Control-Allow-Originでヘッダーを設定しAccess-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 を介してサポートしていません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その呼び出しを定義します。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/

これは Dojo 1.8+ に適用されdojo/requestます。dojo/_base/xhr同じものが必要な場合はありますがdojox.io.xhrPlugins、私は経験がありません。dojo/aspectとにかく、以前の Dojo バージョンに前述のビアを実装するのは非常に簡単です。

于 2013-01-30T14:18:50.673 に答える
0

IE8 と IE9 は、別々の XDomainRequest オブジェクトを使い始めない限り、通常、このようなことをうまく処理できません。リクエストを開始するために何を使用していますか?

これの多くを扱うこれらの他の SO の質問も参照してください。

于 2013-01-30T14:14:49.657 に答える