2010-03-11 12 views
9

Il metodo send() di XMLHttpRequest di Safari supporta un argomento File. Firefox non (ancora).Come verificare se send() di XMLHttpRequest supporta File

Come posso verificare se è supportato? In Firefox, si comporterà come se fosse stata passata una stringa vuota.

Sto cercando di evitare il rilevamento della versione del browser.

Modifica: FF 3.6 sembra supportarlo, ma la domanda è ancora pertinente per le versioni precedenti o altri browser.

+1

firefox <= 3,5 supporto di file di invio in questo modo: xhr.sendAsBinary (file.files [0] .getAsBinary()); dove file.files [0] .getAsBinary() è il punto del file di input – albanx

risposta

2

È possibile che se è possibile creare l'oggetto File, anziché inviarlo lo supporta. In Gecko (firefox,) ciò sarà vero (File e compatibilità file di Send sono stati entrambi rilasciati in 1.9 secondo MDC)

+0

in altre parole, 'if (typeof File ===" oggetto ") {...}' – s4y

-1

Potrebbe non funzionare il vecchio sniffing del browser? jQuery.support potrebbe essere sufficiente?

+1

"Sto cercando di evitare il rilevamento della versione del browser. " Inoltre, quale test in jQuery.support verifica per questo. –

0

Si dovrebbe provare a utilizzare Function.length.

EDIT

Questa soluzione non funzionerà come il file non viene passato come parametro aggiuntivo, come sottolinea rnicholson.

+0

Non capisco come ciò possa essere d'aiuto. (nuova finestra.XMLHttpRequest) .send.length restituirebbe 1 in entrambi i browser, vero? – rnicholson

+0

Anzi, colpa mia. Ho appena pensato che "File" sarebbe stato un argomento aggiuntivo. Dovrei cancellare la risposta? –

0

penso che qualcosa di simile è quello che stai probabilmente alla ricerca di:

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; 
} 
Problemi correlati