web-dev-qa-db-ja.com

クロスドメインXMLHttpRequestsのブラウザーサポートを検出しますか?

クロスドメインXMLHttpRequestsを実行するFirefox3.5の機能を利用するJavascriptに取り組んでいます…しかし、サポートされていない場合は正常に失敗したいと思います。

実際にクロスドメインリクエストを行う以外に、ブラウザによるそれらのサポートを検出する方法はありますか?

43
David Wolever

今後の参考のために、完全なCORS機能の検出は次のようになります。

//Detect browser support for CORS
if ('withCredentials' in new XMLHttpRequest()) {
    /* supports cross-domain requests */
    document.write("CORS supported (XHR)");
}
else if(typeof XDomainRequest !== "undefined"){
  //Use IE-specific "CORS" code with XDR
  document.write("CORS supported (XDR)");
}else{
  //Time to retreat with a fallback or polyfill
  document.write("No CORS Support!");
}

JSBinを使用してこのテストをライブで試す そしてIE、Firefox、Chrome、Safari、およびOperaで適切な応答を確認できます。

非ブラウザー環境では、クロスドメインXHRをサポートするが、XHR2/CORSはサポートしないエッジケースがいくつかあります。このテストでは、これらの状況は考慮されていません。

70
Todd

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ によると、次のものを使用できるはずです。

if ('withCredentials' in new XMLHttpRequest()) {
    /* supports cross-domain requests */
}

(注:そのページには、Chrome 2はこのテストに失敗します[クロスドメインリクエストはサポートしていますが]というコメントがあります。私はChrome 3とテストは現在合格です。)

ブラウザが クロスドメインAPI をサポートしているからといって、ターゲットサーバーがリクエストの完了を許可するわけではないことに注意してください。

35
Crescent Fresh

EasyXDM を確認することをお勧めします。これは、ブラウザー間の癖をラップし、そのブラウザーで利用可能な最良のメカニズムを使用して、異なるドメイン間でクライアントスクリプトで通信するための使いやすいAPIを提供します(例:- postMessage 利用可能な場合、他のメカニズム(利用できない場合)。

明らかに、そのライブラリはブラウザ機能の検出の問題を解決したので、それらの経験から利益を得ることができます。 :-)

4
Justin Grant

IE8には、後でDOMに解析できるテキストとしてRSSを取得するために使用できる XDomainRequest オブジェクトもあります。

1
Sergey Ilinsky