2010-03-11 1 views
9

Метод send() XMLHttpRequest Safari поддерживает аргумент File. Firefox пока не существует.Как проверить, поддерживает ли функция отправки() XMLHttpRequest файл

Как проверить, поддерживается ли это? В Firefox он будет вести себя так, как если бы пустая строка была передана.

Я пытаюсь избежать обнаружения версии браузера.

Редактировать: FF 3.6, похоже, поддерживает его, но вопрос по-прежнему имеет отношение к более старым версиям или другим браузерам.

+1

светлячок <= поддержка 3,5 отправить файл таким образом: xhr.sendAsBinary (file.files [0] .getAsBinary()); где file.files [0] .getAsBinary() - это входная точка файла – albanx

ответ

2

Возможно, что если объект File может быть создан, его можно отправить, чем отправить. В Gecko (firefox), который будет правдой (Файл и совместимость файлов для отправки были выпущены в версии 1.9 в соответствии с MDC)

+0

другими словами: 'if (typeof File ===" object ") {...}' – s4y

-1

Может ли обычный браузер обнюхивать браузер? jQuery.support может быть достаточно?

+1

«Я пытаюсь избежать обнаружения версии браузера. " Кроме того, этот тест в jQuery.support проверяет это. –

0

Вам следует попробовать использовать Function.length.

EDIT

Это решение не будет работать как файл не передается в качестве дополнительного аргумента, как указал rnicholson.

+0

Я не понимаю, как это поможет. (new window.XMLHttpRequest) .send.length вернет 1 в обоих браузерах, не так ли? – rnicholson

+0

Действительно, моя вина. Я просто предположил, что «Файл» будет дополнительным аргументом. Должен ли я удалить ответ? –

0

Я думаю, что-то вроде этого является то, что вы, вероятно, ищете:

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