2010-03-11 3 views
9

La méthode send() de XMLHttpRequest de Safari prend en charge un argument File. Firefox ne le fait pas (encore).Comment vérifier si le fichier send() de XMLHttpRequest prend en charge le fichier

Comment puis-je vérifier si cela est pris en charge? Dans Firefox, il se comportera comme si une chaîne vide était passée. J'essaie d'éviter la détection de la version du navigateur.

Éditer: FF 3.6 semble le supporter, mais la question est toujours pertinente pour les anciennes versions ou d'autres navigateurs.

+1

firefox <= fichier d'envoi 3.5 support de cette manière: xhr.sendAsBinary (file.files [0] .getAsBinary()); où file.files [0] .getAsBinary() est le point de fichier d'entrée – albanx

Répondre

2

Il est possible que si l'objet File peut être créé, alors send le supporte. Dans Gecko (firefox,) ce sera le cas (le fichier et la compatibilité du fichier de l'envoi ont tous deux été libérés en 1.9 selon MDC)

+0

en d'autres termes, 'if (typeof File ===" object ") {...}' – s4y

-1

Est-ce que le vieux navigateur reniflant ne pouvait pas aider? jQuery.support pourrait peut-être suffire?

+1

"J'essaie d'éviter la détection de la version du navigateur. " En outre, quel test dans jQuery.support teste pour cela. –

0

Vous devriez essayer d'utiliser Function.length.

EDIT

Cette solution ne fonctionne pas comme le fichier est passé comme un argument supplémentaire, comme l'a souligné rnicholson.

+0

Je ne comprends pas comment cela pourrait aider. (new window.XMLHttpRequest) .send.length retournera 1 dans les deux navigateurs, n'est-ce pas? – rnicholson

+0

En effet, ma faute. J'ai juste supposé que 'File' serait un argument supplémentaire. Devrais-je supprimer la réponse? –

0

Je pense que quelque chose comme ceci est ce que vous cherchez probablement pour:

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