我正在使用一些使用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