Quiero saber si el navegador admite XMLHttpRequest.responseType = "arraybuffer"
. El problema es que no puedo probar una compatibilidad "xhr2" general, ya que iOS 4.2 tiene soporte xhr2 parcial que incluye (es decir) XMLHttpRequestUpload
pero no responseType = "arraybuffer"
.Cómo detectar detectar si XMLHttpRequest admite responseType = "arraybuffer"?
Respuesta
¿Has probado algo como esto?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
Edición
Creo que puede ser pegado con somthing desagradable como esto
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
Comprobación de ArrayBuffer
debe ser una buena detección de características.
Si un userAgent es compatible con el objeto ArrayBuffer
entonces es probable que trabajará con XHR2
Sin embargo, como se ha señalado, lo mejor sería hacer una prueba de función y no una función de detección.
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();
}
Aparentemente, no se activan excepciones cuando responseType se establece en un valor no admitido. –
@AronWoost Esperaría que no se disparara ninguna excepción, de ahí la verificación del tipo de devolución. Sin embargo, para el futuro código de prueba, es valioso usar 'try catch' en caso de que cualquier otro userAgent arroje una excepción – Raynos
Estoy utilizando el siguiente:
var supported = typeof new XMLHttpRequest().responseType === 'string';
En todos los navegadores que probé que el apoyo de esto, el valor por defecto de responseType es una cadena vacía (como se dice en la especificación: http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute), en navegadores que no admiten responseType, el valor del atributo no está definido.
Esto parece una buena prueba. Para Android 2.3 me sale "indefinido", para Android 4.x obtengo "cadena". Que se corresponde muy bien con http://caniuse.com/xhr2 (como IOS 4.2, Android 2.3 parece tener el apoyo XMLHttpRequestUpload, o al menos "función" 'typeof (XMLHttpRequestUpload)' regresa, no "indefinido") –
Conjunto responseType
a "arraybuffer"
y comprobar si tiene el nuevo valor:
// 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;
}
fracasar para IE6 ya que no verifica si 'responseType' es compatible. – Hydro
El uso de este Modernizr está cubierto por Modernizr.xhr2
. El seguimiento de los comentarios sobre el soporte parcial Modernizr.dataview podría ser aún más preciso.
(function(modernizr, ns){
ns.isSupported = (function(){
return modernizr.xhr2 && modernizr.dataview;
});
return ns;
}(window.Modernizr, window.NameSpace || {}));
Espero que ambas características sean compatibles o no.
Si solo desea detectar si la respuesta "arraybuffer"
es compatible, simplemente verifique si está en el objeto global. Si desea detectar otras funciones, simplemente asigne XHR().responseType
hasta que el navegador lo vacíe ""
o lance un error.
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 permiten responseType arrayBuffer?
- 2. ¿Cómo detectar si se admite una interfaz gráfica?
- 3. ¿Cómo detectar si el navegador admite el iframe?
- 4. Javascript - detectar si se admite el evento lister
- 5. Detectar si el navegador admite la posición: fijo
- 6. ¿Puede detectar JavaScript si el navegador del usuario admite gzip?
- 7. XMLHttpRequest responseType = "json" dando el error SYNTAX_ERR: DOM Exception 12
- 8. Cómo comprobar si el envío de XMLHttpRequest() admite el archivo
- 9. Vbscript detectar si UAC-elevated
- 10. Cómo detectar si numpy está instalado
- 11. ¿Cómo detectar si atof o _wtof failes?
- 12. ¿Cómo detectar si Vista UAC está habilitado?
- 13. iPhone: ¿Cómo detectar si iTunes está jugando?
- 14. Cómo detectar si NSString es nulo?
- 15. Cómo detectar si un micrófono está presente
- 16. ¿Cómo detectar si una variable ha cambiado?
- 17. Cómo detectar si DOMContentLoaded fue despedido
- 18. Cómo detectar si se presiona alguna tecla
- 19. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 20. ¿Cómo detectar si UISwitch está encendido/apagado?
- 21. Cómo detectar si se toca la imagen
- 22. ¿Cómo detectar si un polígono tiene autointersecciones?
- 23. android detectar si la noche
- 24. ¿Cómo detectar si el navegador admite la carga de archivos? (Móvil + Escritorio)
- 25. ¿Cómo puedo detectar si un navegador admite la etiqueta de parpadeo?
- 26. Cómo detectar si el navegador admite el valor "solo texto" en el parámetro contenteditable?
- 27. ¿Cómo puedo detectar si una pantalla es sensible al tacto?
- 28. detectar si el navegador admite omisión de evento de clic derecho
- 29. Detectar si CGPoint dentro del polígono
- 30. detectar si un objeto está vacía
¡Buena idea! Sin embargo, acabo de notar que ese safari móvil en iOS 4.2 ya tiene soporte xhr2 "parcial", que parece incluir XMLHttpRequestUpload pero no responseType = "arraybuffer". Actualizaré la pregunta en consecuencia. –
Aparentemente, no se activan excepciones cuando responseType se establece en un valor no admitido. –
Lo siento, probé esto con la consola Google Chrome y funcionó. (función IsArrayBufferSupported() { var xhr = new XMLHttpRequest(); xhr.open ('GET', '/', true); try { xhr.responseType = "arraybuffer"; return true; } catch (e) {return false;} })() > cierto (función IsArrayBufferSupported() {var xhr = new XMLHttpRequest(); xhr.open ('GET', '/', la verdadera); try { xhr.responseType = "badarg"; return true; } catch (e) {return false;} })() > false –