Question

J'essaie de mettre à jour une ancienne fonction JavaScript utilisée pour détecter la prise en charge d'AJAX (c'est-à-dire l'objet XmlHttpRequest). J'ai regardé en ligne (y compris SO) et trouvé diverses solutions, mais je ne sais pas laquelle est la plus efficace pour détecter simplement une assistance.

La fonction actuelle est:

    function IsSyncAJAXSupported()
    {
        var isSyncAJAXSupported = true;

        var xmlHttp = null;
        var clsids = ["Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for(var i=0; i<clsids.length && xmlHttp == null; i++) {
            try {
                    xmlHttp = new ActiveXObject(clsids[i]);
            } catch(e){}
        }

        if(xmlHttp == null && MS.Browser.isIE)
        {
            isSyncAJAXSupported = false;
        }
        return isSyncAJAXSupported;
    }

Dans Firefox 3, ce qui précède génère des erreurs car MS n’est pas défini.

Je réalise qu’utiliser une bibliothèque serait préférable, mais ce n’est pas une option à court terme. Nous ne prenons en charge que les versions IE6 et supérieures, ainsi que les versions récentes de Firefox, Safari / WebKit et Opera.

Quel est le meilleur moyen d'obtenir un true / false pour le support XmlHttpRequest?

Était-ce utile?

La solution 3

Je suis venu avec ceci:

var xhr = null;
try { xhr = new XMLHttpRequest(); } catch (e) {}
try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
return (xhr!=null);

Cela semble fonctionner alors j'ai pensé le partager.

Autres conseils

Ne pas!

Ou plutôt, ne perdez pas de temps à faire ce que beaucoup de gens ont mieux fait.

Essayez de saisir la source de jQuery ou quelque chose de tel et "emprunter". leurs méthodes; ils ont déjà investi du temps pour prendre en charge le plus grand nombre de navigateurs possible (particulièrement dans le cas de jQuery), alors gagnez du temps.

HTH

Mon code préféré pour cela est:

function CreateXMLHttpRequest()
{
  // Firefox and others
  try { return new XMLHttpRequest(); } catch (e) {}
  // Internet Explorer
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  //alert("XMLHttpRequest not supported");
  // No luck!
  return null;
}

Vous pouvez facilement ajouter des tests pour les variantes d'objets Microsoft ...

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