2013-03-17 13 views
5

Zależy od przeglądarki, chciałbym określić, który obiekt powinien zostać użyty. Dla IE < 10 powinno być XDomainRequest, dla reszty XMLHttpRequest.Jak ustalić, czy używać XMLHttpRequest lub XDomainRequest?

if(window.XDomainRequest) //basically 'if IE' 
    //XDomainRequest 
else 
    //XMLHttpRequest 

Od IE10 ma poparcie Cross-Origin Resource Sharing, to lepiej użyć XMLHttpRequest obiekt z nim. Ten kod nie będzie już działał dobrze (przypuszczam, że IE10 nadal ma wsparcie dla XDomainRequest, popraw mnie, jeśli się mylę, nie mogę go przetestować). Bezpośrednie sprawdzenie przeglądarki nie jest najbezpieczniejszym sposobem ustalenia rzeczy. Więc moje pytanie, jaki jest najlepszy sposób określenia, który obiekt powinien zostać użyty? Szukam czystego rozwiązania JS (nie jQuery).

+0

Spróbuj użyć XMLHttpRequest, a jeśli nie uda się na przykład w try/catch użyj XdomainRequest. Jedno pytanie, czy w ogóle wysyłasz żądania do innych domen? – apelsinapa

+0

Tak, dlatego nie mogę użyć twojego pomysłu - IE <10 ma również obiekt "XMLHttpRequest", ale nie można go użyć do żądania domeny zagranicznej. – geehertush01

+2

Czy to ci pomoże? http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests – apelsinapa

Odpowiedz

5

Tak to robię, ale to nie jest miłe.

var useXDR = window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined); 

Działa ponieważ IE10 ma responseType pustego ciąg dla nowo utworzonej XHR ale w wersji IE, które nie obsługują XHR2, jest niezdefiniowany.

Jeśli pójdziesz tą drogą, pamiętaj, że XDR jest znacznie gorszy w debugowaniu niż XHR - daje mniej informacji, gdy coś pójdzie nie tak i niektóre funkcje działające dobrze nawet w starych implementacjach XmlHttpRequest nie działają w ogóle na XDR.

Nawet jeśli twoja przeglądarka nie obsługuje XHR2 i obsługuje XDR, nadal będziesz potrzebować XHR, gdy żądasz adresów URL z tego samego hosta/portu, z którego ładowana jest twoja strona.

+1

Ta odpowiedź powinna zostać przyjęta. Dlaczego nie zostało to co najmniej przejęte wcześniej? –

Powiązane problemy