检测浏览器对跨域XMLHttpRequests的支持?
-
08-07-2019 - |
题
我正在开发一些利用Firefox 3.5执行跨域XMLHttpRequests的Javascript ...但是如果不支持我们,我会优雅地失败。
除了实际发出跨域请求之外,有没有办法检测浏览器对它们的支持?
解决方案
为了将来参考,完整的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和歌剧。
非浏览器环境中有一些边缘情况支持跨域XHR但不支持XHR2 / CORS。此测试不考虑这些情况。
其他提示
根据 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 并不代表目标服务器将允许请求完成。
您可能需要查看 EasyXDM ,其中包含跨浏览器的怪癖并提供易于使用的功能使用该浏览器的最佳可用机制在不同域之间的客户端脚本中进行通信的API(例如 postMessage 如果可用,其他机制(如果没有)。
显然,该库已经解决了浏览器功能检测问题,因此您可以从他们的经验中受益。 : - )
IE8还有 XDomainRequest 对象可用于将RSS检索为文本,以后可以将其解析为DOM。
不隶属于 StackOverflow