我正在使用一些使用Firefox 3.5的能力來執行跨域XMLHttpRequests的Javascript ......但是如果不支持它們,我會優雅地失敗。檢測瀏覽器對跨域XMLHttpRequests的支持嗎?
除了實際進行跨域請求,有沒有什麼方法可以檢測瀏覽器對它們的支持?
我正在使用一些使用Firefox 3.5的能力來執行跨域XMLHttpRequests的Javascript ......但是如果不支持它們,我會優雅地失敗。檢測瀏覽器對跨域XMLHttpRequests的支持嗎?
除了實際進行跨域請求,有沒有什麼方法可以檢測瀏覽器對它們的支持?
以供將來參考,充滿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。這個測試沒有考慮到這些情況。
根據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並不意味着目標服務器將允許請求完成。
我試過這個,但是我在Opera上得到了一個誤報。我的具體情況實際上是從本地文件加載本地文件,可以通過檢查安全性首選項來激活...但是我無法分辨這個首選項是否實際檢查或沒有嘗試。 – Okarin 2014-04-07 11:13:35
你可能想看看EasyXDM,它封裝跨瀏覽器的怪癖,並提供一個易於使用的API使用最好的機制,該瀏覽器(如postMessage如果可用在不同的域之間的客戶端腳本進行通信,其他機制,如果沒有)。
很明顯,該庫已經解決了瀏覽器功能檢測問題,所以您可以從他們的體驗中受益。 :-)
IE8還有XDomainRequest可用於將RSS作爲文本檢索的對象,可以稍後將其解析爲DOM。
您應該提到,XDomainRequest僅支持GET和POST請求。如果服務器也依賴PUT或DELETE,則XDomainRequest將失敗。 – McFarlane 2012-11-16 08:54:22
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
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