A melhor prática para a detecção de suporte a Ajax / XmlHttpRequest
-
08-07-2019 - |
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?
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 ...