2010-03-11 8 views
9

El método send() de XMLHttpRequest de Safari admite un argumento de archivo. Firefox no (todavía).Cómo comprobar si el envío de XMLHttpRequest() admite el archivo

¿Cómo puedo comprobar si esto es compatible? En Firefox, simplemente se comportará como si se pasara una cadena vacía.

Estoy tratando de evitar hacer la detección de la versión del navegador.

Editar: FF 3.6 parece ser compatible, pero la pregunta sigue siendo relevante para las versiones anteriores u otros navegadores.

+1

Firefox <= 3,5 envío de archivos de soporte de esta manera: xhr.sendAsBinary (file.files [0] .getAsBinary()); donde file.files [0] .getAsBinary() es el punto del archivo de entrada – albanx

Respuesta

2

Es posible que si se puede crear el objeto Archivo, entonces el envío lo admite. En Gecko (firefox,) eso será cierto (el archivo y la compatibilidad del archivo de envío se lanzaron en 1.9 de acuerdo con MDC)

+0

en otras palabras, 'if (typeof File ===" object ") {...}' – s4y

-1

¿Podría ser que olfatear un navegador viejo no ayuda? jQuery.support podría ser suficiente?

+1

"Estoy tratando de evitar hacer la detección de la versión del navegador. " Además, qué prueba en jQuery.support prueba para esto. –

0

Debería intentar usar Function.length.

EDITAR

Esta solución no funcionará como el archivo no se pasa como un argumento adicional, como ha señalado rnicholson.

+0

No entiendo cómo esto podría ayudar. (new window.XMLHttpRequest) .send.length devolvería 1 en ambos navegadores, ¿no es así? – rnicholson

+0

De hecho, mi culpa. Simplemente asumí que 'Archivo' sería un argumento adicional. ¿Debo eliminar la respuesta? –

0

creo que algo como esto es lo que usted está probablemente en busca de:

const XMLHttpFactories = [ 
    function() { return new XDomainRequest(); }, 
    function() { return new XMLHttpRequest(); }, 
    function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, 
    function() { return new ActiveXObject("Msxml3.XMLHTTP"); }, 
    function() { return new ActiveXObject("Microsoft.XMLHTTP"); }, 
]; 

var xhr = null; 

for (var i = 0; i < XMLHttpFactories.length; i++) { 
    try { xhr = XMLHttpFactories[i](); break; } catch (exception) { continue; } 
} 

if (!(xhr && ('upload' in xhr) && ('onprogress' in xhr.upload))) { 
    alert("Sorry, your browser is not supported."); 
    return; 
} 
Cuestiones relacionadas