2009-10-29 81 views

回答

67

以供將來參考,充滿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!"); 
} 

您可以try this test live using JSBin,看看在IE,火狐,Chrome,Safari和Opera適當的反應。

在非瀏覽器環境中有一些邊緣情況,支持跨域XHR但不支持XHR2/CORS。這個測試沒有考慮到這些情況。

+9

您應該提到,XDomainRequest僅支持GET和POST請求。如果服務器也依賴PUT或DELETE,則XDomainRequest將失敗。 – McFarlane 2012-11-16 08:54:22

+2

XDR也支持不從'http'到'https'的跨域請求。請參閱[XDomainRequest - 限制,限制和解決方法](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx) – Boaz 2013-12-12 17:38:14

+3

note,ie11給出誤報,因爲它不支持使用緩存映像的CORS http://web.onassar.com/blog/2013/11/07/internet-explorer-11-and-cors-crossorigin-support/ – jedierikb 2014-01-05 03:16:27

34

根據http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/你應該能夠使用:

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

(注:有是頁面上的鍍鉻2未能做到這一點[雖然它不支持跨域請求]我測試了評論。 Chrome 3和測試正在通過。)

請記住,僅僅因爲瀏覽器可能支持cross-domain API並不意味着目標服務器將允許請求完成。

+0

我試過這個,但是我在Opera上得到了一個誤報。我的具體情況實際上是從本地文件加載本地文件,可以通過檢查安全性首選項來激活...但是我無法分辨這個首選項是否實際檢查或沒有嘗試。 – Okarin 2014-04-07 11:13:35

4

你可能想看看EasyXDM,它封裝跨瀏覽器的怪癖,並提供一個易於使用的API使用最好的機制,該瀏覽器(如postMessage如果可用在不同的域之間的客戶端腳本進行通信,其他機制,如果沒有)。

很明顯,該庫已經解決了瀏覽器功能檢測問題,所以您可以從他們的體驗中受益。 :-)

1

IE8還有XDomainRequest可用於將RSS作爲文本檢索的對象,可以稍後將其解析爲DOM。