43 votes

Détecter le support du navigateur pour les requêtes XMLHttpRequests interdomaines ?

Je travaille sur un Javascript qui utilise la capacité de Firefox 3.5 à effectuer des requêtes XMLHttpRequests inter-domaines Mais j'aimerais échouer gracieusement si elles ne sont pas supportées.

En dehors de l'exécution d'une requête interdomaine, existe-t-il un moyen de détecter la prise en charge de ces requêtes par un navigateur ?

70voto

Todd Points 3522

Pour référence future, la détection complète des fonctionnalités CORS devrait ressembler à quelque chose comme ceci :

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

Vous pouvez essayez ce test en direct en utilisant JSBin et voir la réponse appropriée dans IE, Firefox, Chrome, Safari, et Opera.

Il y a quelques cas limites dans les environnements non-browser que soutenir XHR inter-domaines mais pas XHR2/CORS. Ce test ne tient pas compte de ces situations.

35voto

Crescent Fresh Points 54070

Selon http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ que vous devriez être en mesure d'utiliser :

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

(Note : il y a un commentaire sur cette page indiquant que Chrome 2 ne réussit pas ce test [bien qu'il prenne en charge les requêtes inter-domaines]. J'ai testé Chrome 3 et le test est maintenant réussi).

Gardez à l'esprit que ce n'est pas parce que le navigateur prend en charge l'option API multi-domaine ne signifie pas que le serveur cible permettra à la requête d'aboutir.

4voto

Justin Grant Points 25644

Vous pouvez consulter EasyXDM qui englobe les bizarreries des différents navigateurs et fournit une API facile à utiliser pour communiquer en script client entre différents domaines en utilisant le meilleur mécanisme disponible pour ce navigateur (par ex. postMessage si disponible, d'autres mécanismes sinon).

Il est clair que cette bibliothèque a résolu le problème de la détection des capacités du navigateur, vous pouvez donc bénéficier de son expérience :-)

1voto

Sergey Ilinsky Points 16803

IE8 a également XDomainRequest qui peut être utilisé pour récupérer le RSS sous forme de texte qui peut ensuite être analysé dans le DOM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X