Voglio sapere se il browser supporta XMLHttpRequest.responseType = "arraybuffer"
. Il problema è che non posso testare nuovamente il supporto "generale" xhr2, dal momento che iOS 4.2 ha un supporto xhr2 parziale che include (cioè) XMLHttpRequestUpload
ma non responseType = "arraybuffer"
.Come rilevare la funzionalità se XMLHttpRequest supporta responseType = "arraybuffer"?
risposta
Hai provato qualcosa del genere?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
Modifica
Penso che potrebbe essere bloccato con somthing brutto come questo
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
Controllo di ArrayBuffer
dovrebbe essere una buona funzione di rilevamento.
Se un userAgent supporta l'oggetto ArrayBuffer
allora è probabile che possa funzionare con XHR2
Tuttavia, come detto, sarebbe meglio fare un test funzione e non una funzione di rilevamento.
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();
}
Apparentemente non viene emessa alcuna eccezione quando responseType è impostato su un valore non supportato. –
@AronWoost Mi aspetto che non venga emessa alcuna eccezione, quindi il controllo del tipo restituito. Tuttavia, per il codice di proofing futuro è utile utilizzare 'try catch' nel caso in cui un altro utenteAgent generi un'eccezione – Raynos
Sto usando il seguente:
var supported = typeof new XMLHttpRequest().responseType === 'string';
In tutti i browser che ho provato che supportano questa, il valore predefinito di responseType è una stringa vuota (proprio come si dice nelle specifiche: http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute), nei browser che non supportano responseType il valore dell'attributo non è definito.
Questo sembra un buon test. Per Android 2.3 ottengo "indefinito", per Android 4.x ottengo "stringa". Che corrisponde perfettamente a http://caniuse.com/xhr2 (Come iOS 4.2, Android 2.3 sembra avere il supporto XMLHttpRequestUpload, o almeno 'typeof (XMLHttpRequestUpload)' restituisce "function", non "undefined") –
Set responseType
a "arraybuffer"
e verificare se ha ottenuto il nuovo valore:
// 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;
}
Fallisce per IE6 dal momento che non si controlla se 'responseType' è supportato. – Hydro
Utilizzando Modernizr questo è coperto da Modernizr.xhr2
. Il seguito dei commenti relativi al supporto parziale Modernizr.dataview potrebbe essere ancora più accurato.
(function(modernizr, ns){
ns.isSupported = (function(){
return modernizr.xhr2 && modernizr.dataview;
});
return ns;
}(window.Modernizr, window.NameSpace || {}));
Mi aspetto che entrambe le funzioni siano supportate o meno.
Se si desidera rilevare se la risposta "arraybuffer"
è supportata, è sufficiente verificare se si trova nell'oggetto globale. Se vuoi rilevare altre funzionalità, assegna semplicemente lo XHR().responseType
finché il browser non lo svuota ""
o genera un errore.
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. jQuery $ .ajax o $ .load consente responseType arrayBuffer?
- 2. WebKit equivalente a Firefox "moz-chunked-arraybuffer" xhr responseType
- 3. Come leggere risposta di errore JSON da $ http se responseType è ArrayBuffer
- 4. Come rilevare se un compilatore supporta static_assert?
- 5. XMLHttpRequest responseType = "json" che dà errore SYNTAX_ERR: DOM Exception 12
- 6. Come verificare se send() di XMLHttpRequest supporta File
- 7. Come rilevare se il browser accetta eventi xmlhttprequest da addEventListener?
- 8. Come rilevare se la CPU supporta la tecnologia Intel Anti-Theft?
- 9. Come rilevare la funzionalità copia negli appunti prima di utilizzarla
- 10. Come posso rilevare se un dispositivo iOS supporta l'effetto sfocatura?
- 11. Come posso rilevare se un browser supporta MJPEG?
- 12. Determinare se il browser supporta la stampa
- 13. È possibile rilevare JavaScript se il browser dell'utente supporta gzip?
- 14. Come controllare JavaScript se l'oggetto XMLHttpRequest supporta gli eventi di avanzamento W3C?
- 15. Django CMS - come rilevare se la homepage?
- 16. Android: come rilevare se la fotocamera lampeggiava
- 17. Come rilevare se il browser supporta il valore "solo testo" nel parametro contenteditable?
- 18. Flex mobile supporta le funzionalità mobili native?
- 19. Quali funzionalità CSS3 supporta Internet Explorer 8?
- 20. Come verificare se il browser supporta HTML5?
- 21. Rileva se il browser supporta la posizione: fisso
- 22. Come rilevare se un server utilizza SPDY
- 23. Rilevare se JIT è disponibile
- 24. Come posso rilevare se il mio dispositivo Apple supporta Bluetooth Low Energy
- 25. Verifica se Browser supporta il timepicker HTML5
- 26. Come posso rilevare se un browser supporta il tag di intermittenza?
- 27. ArrayBuffer vs ArrayBuilder in scala
- 28. Convert Seq to ArrayBuffer
- 29. Come ottenere una stringa binaria da ArrayBuffer?
- 30. Come posso rilevare se la telecamera è limitata dall'utente
Buona idea! Tuttavia, ho appena notato che il safari mobile su iOS 4.2 ha già un supporto xhr2 "parziale", che include XMLHttpRequestUpload ma non responseType = "arraybuffer". Aggiornerò la domanda di conseguenza. –
Apparentemente non viene emessa alcuna eccezione quando responseType è impostato su un valore non supportato. –
Siamo spiacenti, ho provato questo con la console di Google Chrome e ha funzionato. (funzione IsArrayBufferSupported() {var XHR = new XMLHttpRequest(); xhr.open ('GET', '/', true); try { XHR.responseType = "arraybuffer"; return true; } catch (e) {return false;} })() > true (funzione IsArrayBufferSupported() {var XHR = new XMLHttpRequest(); xhr.open ('GET', '/', vero); try { xhr.responseType = "badarg"; return true; } catch (e) {return false;} })() > false –