Pregunta

Estoy trabajando en un Javascript que hace uso de la capacidad de Firefox 3.5 para realizar XMLHttpRequests entre dominios ... Pero me gustaría fallar con gracia si no son compatibles.

Además de hacer una solicitud entre dominios, ¿hay alguna forma de detectar el soporte de un navegador para ellos?

¿Fue útil?

Solución

Para referencia futura, la detección completa de la función CORS debería verse así:

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

Puedes probar esta prueba en vivo usando JSBin y ver la respuesta adecuada en IE, Firefox, Chrome, Safari y Ópera.

Hay algunos casos extremos en entornos que no son del navegador que admiten XHR entre dominios pero no XHR2 / CORS. Esta prueba no tiene en cuenta esas situaciones.

Otros consejos

De acuerdo a http://hacks.mozilla.org / 2009/07 / cross-site-xmlhttprequest-with-cors / debería poder usar:

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

(Nota: hay un comentario en esa página de que Chrome 2 falla esta prueba [aunque admite solicitudes de dominio cruzado]. Probé Chrome 3 y la prueba ahora está pasando).

Tenga en cuenta que el hecho de que el navegador pueda admitir la API entre dominios no significa el servidor de destino permitirá que se complete la solicitud.

Es posible que desee ver EasyXDM , que envuelve las peculiaridades de los navegadores cruzados y proporciona una facilidad de uso API para comunicarse en el script del cliente entre diferentes dominios utilizando el mejor mecanismo disponible para ese navegador (por ejemplo, postMessage si está disponible, otros mecanismos si no).

Claramente, esa biblioteca ha resuelto el problema de detección de capacidades del navegador, por lo que puede beneficiarse de su experiencia. :-)

IE8 también tiene objeto XDomainRequest que se puede usar para recuperar RSS como texto que luego se puede analizar en DOM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top