检测浏览器对跨域XMLHttpRequests的支持?

我正在使用一些Javascript,它使用Firefox 3.5的能力来执行跨域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!"); } 

您可以使用JSBin试试这个testing,并在IE,Firefox,Chrome,Safari和Opera中看到正确的响应。

在非浏览器环境中有一些边界情况支持跨域XHR,但不支持XHR2 / CORS。 这个testing没有考虑到这些情况。

根据http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/你应该能够使用:;

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

(注意:该页面上有一条评论,表示Chrome 2无法通过此testing[虽然它确实支持跨域请求]。我testing了Chrome 3,testing通过。)

请记住,只是因为浏览器可能支持跨域API并不意味着目标服务器将允许请求完成。

你可能想看看EasyXDM ,它包装了跨浏览器的怪癖,并提供了一个易于使用的API,用于使用该浏览器的最佳可用机制在不同域之间进行客户端脚本通信(例如postMessage(如果可用,其他机制) 。

显然,图书馆已经解决了浏览器function检测问题,所以你可以从他们的经验中受益。 🙂

IE8还具有XDomainRequest对象,可用于将RSS作为文本进行检索,以后可以将其parsing为DOM。