63

更新: XDomainRequestは非常に貧弱な実装であり、多くの制限があるため、XDomainRequestに投資しないことを強くお勧めします。基本的には、非SSLサーバーへのGETリクエストに対してのみ実際に機能するため、jsonpなどを使用することをお勧めします。


CORSを使用してクロスドメインAPIを呼び出していますが、InternetExplorerで問題が発生しています。オブジェクトを介してIE8とIE9でCORSが可能になるはずですが、XDomainRequest動作させることができません。

JQueryはXDomainRequestのネイティブサポートを提供することを拒否しますが、このサポートを追加するためにいくつかのjQueryプラグインが提案されています。このトピックでは、そのような2つのプラグインを提案します。jQuery.XDomainRequest.jsxdr.jsで、動作することが報告されています。Afaik、プラグインはの動作を自動的にオーバーライドする必要がありますjQuery.ajaxここで別のプラグインを見つけました。

CORS対応サーバーへのajaxリクエストを実行するそれぞれのプラグインjQuery.XDomainRequestxdrおよびjquery.ie.corsを含む小さなデモページを配置しました。ページはChromeとFirefoxで機能していますが、IE8 / 9は(要求を行う前であっても)すぐにアクセス許可拒否エラーをスローします。このMSDNの投稿では、別のハンドラーを追加することを提案してxhr.onprogress = function() {};いますが、これを試しましたが、どちらも機能していません。

私が間違っていることの手がかりはありますか?また、MS仮想サーバーを使用してIE8でテストしましたが、まったく同じ問題があります。

編集:わかりました。問題の一部は、HTTPS経由でPOSTを使用していたことであることがわかりました。どうやらXDomainRequestはHTTPS経由のCORSを許可していません。HTTPに切り替えることはできますが、POSTが本当に必要です。

Edit2:このストーリーの終わりについては、githubでこの問題を参照してください。HTTP POSTを使用する場合、xDomainRequestはリクエスト本文(引数)をとしてのみエンコードできることがわかりますtext/plainapplication/x-www-form-urlencoded誰もがまたはを使用するため、これはほとんど価値がありませんmultipart/form-data

4

3 に答える 3

29

POSTメソッドがサポートされており、クロスドメインhttps://リクエストを作成するには、呼び出しページもhttps経由でロードする必要があります。これは、XDomainRequestのこれらの制限およびその他の制限を詳細に説明している私が見つけた最高の記事です。

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

于 2012-08-24T11:24:25.893 に答える
5

IE9以下を使用すると、プロキシに適切にダウングレードするプロキシを作成しました。ASP.NETを使用している場合は、コードを変更する必要はありません。

解決策は2つの部分に分かれています。1つ目は、jQueryajax処理にフックするjqueryスクリプトです。crossDomainリクエストが行われ、ブラウザがIEの場合、ウェブサーバーが自動的に呼び出されます。

$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
    if (!window.CorsProxyUrl) {
        window.CorsProxyUrl = '/corsproxy/';
    }
    // only proxy those requests
    // that are marked as crossDomain requests.
    if (!options.crossDomain) {
        return;
    }

    if (getIeVersion() && getIeVersion() < 10) {
        var url = options.url;
        options.beforeSend = function (request) {
            request.setRequestHeader("X-CorsProxy-Url", url);
        };
        options.url = window.CorsProxyUrl;
        options.crossDomain = false;
    }
});

Webサーバーでは、リクエストを受信し、X-CorsProxy-Urlhttpヘッダーから値を取得し、HTTPリクエストを実行して、最後に結果を返す必要があります。

私のブログ投稿: http: //blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/

于 2014-04-24T11:04:56.450 に答える
0

IE8 / 9のCORSリクエストには、jQueryプラグインjquery-transport-xdrを使用できます。

于 2015-10-06T20:18:49.160 に答える