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

时间:2009-10-29 03:46:28

标签: javascript xmlhttprequest cross-domain

我正在开发一些利用Firefox 3.5执行跨域XMLHttpRequests的Javascript ...但是如果不支持我们,我会优雅地失败。

除了实际发出跨域请求之外,有没有办法检测浏览器对它们的支持?

4 个答案:

答案 0 :(得分:70)

为了将来参考,完整的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,Firefox,Chrome,Safari和Opera中看到正确的响应。

非浏览器环境中有一些边缘情况支持跨域XHR但不支持XHR2 / CORS。此测试不考虑这些情况。

答案 1 :(得分:35)

根据http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/,您应该可以使用:

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

(注意:该页面上有评论说Chrome 2未通过此测试[虽然它确实支持跨域请求]。我测试了Chrome 3,测试现在正在通过。)

请记住,仅仅因为浏览器可能支持cross-domain API并不意味着目标服务器将允许请求完成。

答案 2 :(得分:4)

您可能希望查看EasyXDM,其中包含跨浏览器的怪癖,并提供易于使用的API,以便使用该浏览器的最佳可用机制在不同域之间的客户端脚本中进行通信(例如{{ 3}}如果可用,其他机制如果没有)。

显然,该库已经解决了浏览器功能检测问题,因此您可以从他们的经验中受益。 : - )

答案 3 :(得分:1)

IE8还有XDomainRequest对象,可用于将RSS检索为文本,以后可以将其解析为DOM。