2013-05-08 69 views
2

我有一個關於<input type=file> HTML元素的問題 - 具體來說,爲什麼所有跡象都指向Windows Phone 8(IE 10 Mobile)支持,但它確實沒有工作。JavaScript中的本地文件支持檢測 - Windows Phone 8錯誤

我一直在做一個照片上傳器項目,並在Javascript開發中,我有檢查File API支持的邏輯,所以我知道我是否可以支持本地文件選擇。令人驚訝的是,我所使用的代碼在Windows Phone 8上返回了true的值。這應該不是問題,但<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; 
} 

我希望有人能闡明如何更好地檢查並確認本地文件的選擇可在特定設備上的一些光/瀏覽器。正如我所說,我目前的解決方案在WP 8上返回true。我一直在嘗試各種不同的方法來查看<input type=file>是否啓用(以下片段),但所有其他解決方案仍然返回WP 8的true

一個警告是這樣的:我真的希望代碼是設備不可知的。因此,我不想嗅探瀏覽器用戶代理。在我看來,用戶代理嗅探是我不想實現的後備。

這裏有一些解決方案,我發現和嘗試過,但仍然在WP 8返回true

引用的輸入元素上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一些系統返回false積極支持,您可以通過使用正則表達式檢查他們如

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; 
} 
克服這個