2013-05-08 2 views
2

У меня есть вопрос о <input type=file> HTML-элемент - в частности, почему все признаки указывают на то, что он поддерживается на Windows Phone 8 (IE 10 Mobile), но это действительно не так. Работа.Обнаружение локальной файловой поддержки в JavaScript - Windows Phone 8 Ошибка

Я работаю над проектом загрузчика фотографий, и в разработке Javascript у меня есть логика для проверки поддержки API файлов, поэтому я знаю, могу ли я поддерживать локальный выбор файлов. Удивительно, что код, который у меня на месте, возвращает значение true на Windows Phone 8. Это не должно быть проблемой, однако элемент <input type=file> на самом деле не поддерживается для WP 8 (как отмечено в блоге Windows в article about IE 10 for Mobile). Результат на WP 8, если на странице находится элемент <input type=file>, он отображается просто отлично, но ничего не происходит при нажатии кнопки «Обзор».

Мой JS код, чтобы проверить поддержку API файла является:

function checkLocalFileSupport() { 
    if (window.File && window.FileReader && window.FileList && window.Blob) { 
     return true; 
    } 
    return false; 
} 

Я надеюсь, что кто-то может пролить некоторый свет на то, как лучше проверить и подтвердить, если локальный выбор файлов на конкретном устройстве/браузер. Как я уже сказал, мое текущее решение возвращает true в WP 8. Я пытаюсь использовать различные методы, чтобы увидеть, включен ли <input type=file> (фрагменты ниже), но все остальные решения по-прежнему возвращают true для WP 8.

Одно из таких предостережений: I действительно хотите, чтобы код был агностическим. Таким образом, я не хочу обнюхивать пользователя-агента браузера. На мой взгляд, обнюхивание пользовательского агента - это откат, который я бы предпочел не реализовывать.

Вот несколько решений, которые я нашел и пытались, но все-таки вернуться true на WP 8:

REFERENCING атрибут на входном элементе disabled:

function isInputTypeFileImplemented() { 
    var elem = document.createElement("input"); 
    elem.type = "file"; 
    if (elem.disabled) return false; 
    try { 
     elem.value = "Test"; // Throws error if type=file is implemented 
     return elem.value != "Test"; 
    } catch(e) { 
     return elem.type == "file"; 
    } 
} 

Использование jQuery.support :

var support = (function(undefined) { 
    return $("<input type='file'>") // create test element 
       .get(0)    // get native element 
       .files !== undefined; // check whether files property is not undefined 
})(); 

Надеюсь, кто-то может помочь пролить свет на то, как точно y получите WP 8 для возврата значения false для поддержки локального файла.

Заранее благодарен!

ответ

0

Согласно this blog post некоторым системам возвращают ложноположительную поддержку и вы можете преодолеть это, проверяя их с RegExp, такими как

if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) { 
    return false; 
}