Pergunta

Estou tentando atualizar uma antiga função JavaScript usado para detectar o suporte para AJAX (ou seja, o objeto XmlHttpRequest). Eu olhei on-line (incluindo SO) e encontrou várias soluções, mas não tenho certeza que é o mais eficiente para simplesmente detectar apoio.

A função atual é:

    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;
    }

No Firefox 3, o acima dá erros porque MS é indefinido.

Eu percebo que o uso de uma biblioteca seria melhor, mas isso não é uma opção para o curto prazo. Nós só estão a apoiar IE6 e acima de + versões recentes do Firefox, Safari / WebKit e Opera.

O que é a melhor maneira de conseguir um verdadeiro / falso para suporte XmlHttpRequest?

Foi útil?

Solução 3

Eu vim acima com este:

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);

Parece que funciona então pensei que eu iria partilhá-la.

Outras dicas

NÃO!

Ou melhor, não perca tempo fazendo o que muitas outras pessoas têm feito melhor.

Tente pegar a fonte do jQuery ou algo assim e "emprestar" seus métodos; eles já investiu o tempo para apoiar tantos navegadores possível (especialmente verdadeiro no caso do jQuery) para salvar a si mesmo o tempo todo.

HTH

Meu código preferencial para isto é:

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;
}

Você pode facilmente adicionar testes para variantes da Microsoft objetos ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top