2011-09-03 11 views
31

¿Cómo puedo verificar si el navegador admite la carga de archivos HTML5 (objeto FormData)?¿Cómo puedo verificar si el navegador admite la carga de archivos HTML5 (objeto FormData)?

var fd = new FormData(); 

Tras la respuesta de esta post, pero el código no devuelve respuesta correcta sobre el navegador,

window.onload = function() 
{ 
if (!!window.FileReader) 
{ 
    alert('supported'); 
} 
else 
{ 
    alert('not supported'); 
} 
} 


Firefox - supported 
Chrome - supported 
Opera - supported 
Safari - not supported 
IE9 - not supported 

Pero el soporte del navegador correcto debería ser,

Firefox - supported 
Chrome - supported 
Opera - not supported 
Safari - supported 
IE9 - not supported 

tengo probó la carga del archivo html 5 en Opera y es no trabajando g seguro.

Estoy seguro de que safari admite la carga de archivos html 5.

Respuesta

11

De http://blog.new-bamboo.co.uk/2010/7/30/html5-powered-ajax-file-uploads

function supportAjaxUploadProgressEvents() { 
    var xhr = new XMLHttpRequest(); 
    return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); 
}; 

Como FormData, la capacidad de enviar() uno, y la propiedad de subida (y su caso onProgress) son todos parte de XMLHttpRequest nivel 2, puede probar para .upload a ver si tienes un nivel 2. No tengo una Mac a mano, pero la función (tristemente, pero correctamente) devuelve falso para Opera 11.50 (y verdadero para Firefox 4).

-3

Debe verificar si el navegador es compatible con la API de archivos HTML5. Lo hago comprobando si la función FileReader está configurada; si no está configurada, significa que el navegador no admitirá la API del archivo.

// Check if window.fileReader exists to make sure the browser supports file uploads 
if (typeof(window.FileReader) == 'undefined') 
    { 
     alert'Browser does not support HTML5 file uploads!'); 
    } 
+3

Este código busca el objeto FileReader, que es diferente al objeto FormData. – webinista

68

Trate if(window.FormData === undefined) o if(window.FormData !== undefined).

+12

+1, en IE8/IE9 '(window.FormData === undefined)' devuelve verdadero y en IE10, devuelve falso. – Annie

+2

Probablemente debería usar 'typeof', ya que' undefined' no es una palabra clave en algunos navegadores. (Por ejemplo, puedo decir 'var undefined = window.FormData') – Azmisov

+0

Entonces, con typeof, "if (typeof (window.FormData) == 'undefined')", ¿verdad? – DCShannon

2

Este es el de una sola línea que utilizo para comprobar si el navegador es compatible con FormData y subir el progreso, en jQuery:

var xhr2 = !! (window.FormData && ("upload" in ($.ajaxSettings.xhr())); 
1

En Safari 5.1.7, Firefox < 6, Opera 12.14 < formulario de datos es compatible, pero tiene errores.

  • Safari volverá tamaño del archivo 0

    Opera no es compatible con el método de agregación de datos del formulario

    Firefox < 6 no funciona correctamente

Cuestiones relacionadas