Chcę się dowiedzieć, czy przeglądarka obsługuje XMLHttpRequest.responseType = "arraybuffer"
. Problem polega na tym, że nie mogę przetestować przed pewną "ogólną" obsługą xhr2, ponieważ iOS 4.2 ma częściową obsługę xhr2, która obejmuje (tj.) XMLHttpRequestUpload
, ale nie responseType = "arraybuffer"
.Jak wykrywać, czy XMLHttpRequest obsługuje responseType = "arraybuffer"?
Odpowiedz
Próbowałeś czegoś takiego?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
Edit
myślę, że może być zatrzymany z somthing brzydki jak ten
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
sprawdzanie ArrayBuffer
powinien być dobry wykrywanie cecha.
Jeśli userAgent obsługuje obiekt ArrayBuffer
to prawdopodobnie będzie pracować z XHR2
Jednak jak zauważył, że najlepiej byłoby zrobić test funkcji, a nie funkcja wykrywania.
function IsArrayBufferSupported(cb){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try {
xhr.responseType = "arraybuffer";
} catch (e){
return cb(false);
}
xhr.onload = function onload() {
if (ArrayBuffer.prototype.isPrototypeOf(this.response)) {
return cb(true);
}
cb(false);
}
xhr.send();
}
Podobno żadne wyjątki nie są uruchamiane, gdy parametr responseType ma wartość nieobsługiwaną. –
@AronWoost Nie oczekiwałbym zwolnienia od wyjątku, stąd kontrola typu zwrotu. Jednak dla przyszłego kodu sprawdzającego warto użyć polecenia "try catch", jeśli jakakolwiek inna userAgent zgłasza wyjątek. – Raynos
Używam następujący:
var supported = typeof new XMLHttpRequest().responseType === 'string';
we wszystkich przeglądarkach testowałem obsługujących tę wartość domyślna responseType jest pusty ciąg znaków (tak jak jest napisane w specyfikacji: http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute) w przeglądarkach, które nie obsługują responseType, wartość atrybutu jest niezdefiniowana.
To wydaje się być dobrym testem. Dla systemu Android 2.3 otrzymuję "undefined", dla Androida 4.x otrzymuję "ciąg". Co odpowiada ładnie z http://caniuse.com/xhr2 (Podobnie jak iOS 4.2, Android 2.3 wydaje się mieć obsługę XMLHttpRequestUpload, lub przynajmniej 'typeof (XMLHttpRequestUpload)' zwraca "funkcję", a nie "niezdefiniowane") –
Set responseType
do "arraybuffer"
i sprawdzić, czy dostał nową wartość:
// call like isResponseTypeSupported('arraybuffer')
function isResponseTypeSupported(responseType) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/');
try {
xhr.responseType = responseType;
} catch (e) {
return false;
}
return xhr.responseType === responseType;
}
It fail for IE6 ponieważ nie sprawdzasz, czy 'responseType' jest obsługiwane. – Hydro
Korzystanie modernizr ten jest objęty Modernizr.xhr2
. Kontynuacja komentarzy dotyczących częściowego wsparcia Modernizr.dataview może być jeszcze dokładniejsza.
(function(modernizr, ns){
ns.isSupported = (function(){
return modernizr.xhr2 && modernizr.dataview;
});
return ns;
}(window.Modernizr, window.NameSpace || {}));
Oczekuję, że obie funkcje będą obsługiwane, czy nie.
Jeśli chcesz tylko sprawdzić, czy odpowiedź "arraybuffer"
jest obsługiwana, po prostu sprawdź, czy znajduje się w obiekcie globalnym. Jeśli chcesz wykryć inne funkcje, po prostu przydziel XHR().responseType
, dopóki przeglądarka nie opróżni go lub nie wyśle błędu.
function isAjaxResponseSupported(type) {
var xhr = new XMLHttpRequest;
/* Check if .responseType is supported first */
if (typeof xhr.responseType === 'string') {
/* Some browsers throw error for invalid .responseType */
try {
xhr.responseType = type;
// If they don't,
// check if .responseType is equal to @type.
return xhr.responseType === type;
} catch (e) {
return false;
}
; else return false;
}
- 1. Czy jQuery $ .ajax lub $ .load pozwala na responseType arrayBuffer?
- 2. XMLHttpRequest responseType = "json" podając błąd SYNTAX_ERR: DOM Exception 12
- 3. Jak odczytywać JSON odpowiedzi błędu z $ http jeśli responseType jest arraybuffer
- 4. Wyświetlanie pdf z arraybuffer
- 5. Resize ArrayBuffer
- 6. Jak ustalić, czy używać XMLHttpRequest lub XDomainRequest?
- 7. Jak uzyskać postęp z XMLHttpRequest
- 8. Javascript: Jak wykrywać, czy słowo jest podświetlone?
- 9. Jak uzyskać odpowiedź XMLHttpRequest?
- 10. ArrayBuffer vs ArrayBuilder in scala
- 11. XMLHttpRequest: Obsługa przeglądarki dla sendAsBinary?
- 12. Jak napisać plik z ArrayBuffer w JS
- 13. Jak uzyskać ciąg znaków binarnych z ArrayBuffer?
- 14. Jak wykrywać zamknięcie przeglądarki?
- 15. Czy SystemVerilog obsługuje downcasting?
- 16. Czy SQLite obsługuje SCOPE_IDENTITY?
- 17. Czy Ember.js obsługuje IE6?
- 18. Czy EF7 obsługuje wyliczenia?
- 19. Jak wykrywać zatrzymanie myszy
- 20. Jak wykrywać zatrzymanie myszy?
- 21. Czy mogę utworzyć XMLHttpRequest do innej domeny?
- 22. Jak utworzyć opakowanie/proxy XMLHttpRequest?
- 23. Czy PetaPoco obsługuje wyliczenia?
- 24. Jak odczytywać dane binarne w AngularJS w ArrayBuffer?
- 25. Czy Mono obsługuje XAML?
- 26. Czy Winapi obsługuje globalnie?
- 27. Czy libspotify obsługuje oauth
- 28. Czy Heroku obsługuje PHP?
- 29. Czy CMake obsługuje Python3?
- 30. Czy SQLAlchemy obsługuje buforowanie?
Dobry pomysł! Jednak zauważyłem, że mobilne safari na iOS 4.2 ma już "częściową" obsługę xhr2, która łączy XMLHttpRequestUpload, ale nie responseType = "arraybuffer". Odpowiednio zaktualizuję pytanie. –
Podobno żadne wyjątki nie są uruchamiane, gdy parametr responseType ma wartość nieobsługiwaną. –
Przepraszam, przetestowałem to za pomocą konsoli Google Chrome i zadziałało. (funkcja IsArrayBufferSupported() {var XHR = new XMLHttpRequest(); xhr.open ('get', '/', true); try { XHR.responseType = "arraybuffer"; return true; } zaczep (e) {zwraca fałsz;} })() > prawda (funkcja IsArrayBufferSupported() { var XHR = nowy XMLHttpRequest(); xhr.open ('GET', '/' prawda); try { xhr.responseType = "badarg"; return true; } catch (e) {return false;} })() > false –