Обнаружение ввода файлов браузера

Я понимаю, что Mobile Safari не поддерживает <input type="file" /> . Я хотел бы иметь возможность отображать некоторую «не поддерживаемую» информацию, если пользователь не может загружать файлы через мою HTML-форму.

Я просмотрел этот вопрос, и хотя ответ БК хорош, это не является окончательным.

Возможно ли разумнее удалить форму на основе ширины устройства? Под этим я подразумеваю проверку ширины устройства с помощью @media (max-device-width: 480px) {} . Это плохой подход? Существуют ли на рынке мобильные устройства, поддерживающие загрузку файлов непосредственно в браузере?

Я знаю, что iOS6 будет поддерживать загрузку мультимедиа , но он еще не выпущен. Есть ли другие? Как насчет Android? Windows Mobile?

Я просто пробовал это … и это работает …

Попробуй сам! http://fiddle.jshell.net/nmGRu/show/ (если вы обнаружите какие-либо браузеры, которые не смогут сообщить о правильном результате, который я хотел бы знать … для каких-либо дополнительных действий, которые работают, это поможет завершить этот ответ)

Safari (iOS 5 и ниже) вернет false поскольку он не поддерживает загрузку файлов (в частности, он позволяет добавлять входные данные, но отключает его) … но мобильные браузеры, которые поддерживают его, как Samsung Galaxy Tab (Android), BlackBerry PlayBook / BlackBerry 10 (я тестирую на Dev Alpha) вернет true как их браузер поддерживает загрузку.

Правильные результаты теста:

  • Apple iPhone iOS 5 и ниже Safari (обнаруживает поддержку NO )
  • Apple iPhone iOS 6 Safari (обнаруживает поддержку – позволяет выбирать фото / видео)
  • Apple iOS 4 / iOS 5, jailbroken, Safari Upload Enabler установлен (обнаруживает поддержку)
  • Apple iPhone с Chrome (обнаруживает поддержку NO )
  • Apple iPhone с Opera Mini (обнаруживает поддержку – позволяет выбирать фото)
  • Android-версия Chrome (обнаруживает поддержку)
  • Android-версия Firefox (обнаруживает поддержку)
  • Android-версия Opera (обнаруживает поддержку)
  • BlackBerry OS7 SmartPhones (обнаруживает поддержку)
  • BlackBerry PlayBook (обнаруживает поддержку)
  • BlackBerry 10 (Dev Alpha и Z10) (обнаруживает поддержку)
  • HTC Desire (обнаруживает поддержку)
  • Samsung Galaxy Nexus (обнаруживает поддержку)
  • Samsung Galaxy Nexus S (обнаруживает поддержку)
  • Планшет Samsung Galaxy Nexus 7 (обнаруживает поддержку)
  • Samsung Galaxy Note (обнаруживает поддержку)
  • Samsung Galaxy S2 (обнаруживает поддержку)
  • Samsung Galaxy S3 (обнаруживает поддержку)
  • Samsung Galaxy Tab (обнаруживает поддержку)
  • Tizen (обнаруживает поддержку)

Неправильные результаты теста на обнаружение:

  • Windows Phone {Tango} (обнаруживает поддержку, но на самом деле у нее нет поддержки)

Примечание. Я работаю над пересмотром этого кода, чтобы решить проблему обнаружения на телефоне Windows.

Вот чистая версия, которая просто возвращает логическое … и не загрязняет страницу.

 function hasFileUploadSupport(){ var hasSupport = true; try{ var testFileInput = document.createElement('input'); testFileInput.type = 'file'; testFileInput.style.display = 'none'; document.getElementsByTagName('body')[0].appendChild(testFileInput); if(testFileInput.disabled){ hasSupport = false; } } catch(ex){ hasSupport = false; } finally { if(testFileInput){ testFileInput.parentNode.removeChild(testFileInput); } } return hasSupport; } alert(hasFileUploadSupport());