开发者

Detect browser support for cross-domain XMLHttpRequests?

I'm w开发者_JAVA技巧orking on some Javascript that makes use of Firefox 3.5's ability to perform cross-domain XMLHttpRequests… But I'd like to fail gracefully if they aren't supported.

Apart from actually making a cross-domain request, is there any way to detect a browser's support for them?


For future reference, full CORS feature detection should look something like this:

//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!");
}

You can try this test live using JSBin and see the proper response in IE, Firefox, Chrome, Safari, and Opera.

There are some edge cases in non-browser environments that do support cross-domain XHR but not XHR2/CORS. This test does not account for those situations.


According to http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ you should be able to use:

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

(Note: there is a comment on that page that Chrome 2 fails this test [although it does support cross-domain requests]. I tested Chrome 3 and the test is now passing.)

Keep in mind that just because the browser might support the cross-domain API does not mean the target server will allow the request to complete.


You might want to look at EasyXDM, which wraps cross-browser quirks and provides an easy-to-use API for communicating in client script between different domains using the best available mechanism for that browser (e.g. postMessage if available, other mechanisms if not).

Clearly that library has solved the browser-capabilities detection problem, so you can benefit from their experience. :-)


IE8 also has XDomainRequest object that can be used to retrieve RSS as text which can later be parsed into DOM.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜