Question

Je travaille sur un Javascript qui exploite la capacité de Firefox 3.5 d'exécuter des XMLHttpRequests interdomaines… Mais j'aimerais échouer normalement s'ils ne sont pas pris en charge.

Mis à part le fait de faire une demande interdomaine, y a-t-il un moyen de détecter la prise en charge par un navigateur?

Était-ce utile?

La solution

Pour toute référence future, la détection complète des fonctionnalités du système CORS devrait ressembler à 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 faire ce test en direct avec JSBin et voir la réponse appropriée dans IE, Firefox, Chrome, Safari et Opéra.

Il existe des cas extrêmes dans des environnements autres que des navigateurs que prend en charge XHR interdomaine, mais pas XHR2 / CORS. Ce test ne tient pas compte de ces situations.

Autres conseils

Selon http://hacks.mozilla.org / 2009/07 / cross-site-xmlhttprequest-with-cors / , vous devriez pouvoir utiliser:

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

(Remarque: il y a un commentaire sur cette page que Chrome 2 échoue à ce test [bien qu'il prenne en charge les requêtes interdomaine]. J'ai testé Chrome 3 et le test est en train de passer.)

N'oubliez pas que le fait que le navigateur prenne en charge l'A API interdomaine ne signifie pas le serveur cible permettra à la requête de se terminer.

Vous voudrez peut-être consulter EasyXDM , qui résout les bizarreries entre navigateurs et fournit une interface conviviale. API permettant de communiquer dans un script client entre différents domaines en utilisant le meilleur mécanisme disponible pour ce navigateur (par exemple, 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 fonctionnalités du navigateur afin que vous puissiez bénéficier de son expérience. : -)

IE8 contient également un XDomainRequest objet. qui peut être utilisé pour récupérer des flux RSS sous forme de texte qui peut ensuite être analysé dans DOM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top