1. 程式人生 > >關於微信WEBVIEW網頁無法上傳檔案的問題,即是INPUT FILE不支援的問題

關於微信WEBVIEW網頁無法上傳檔案的問題,即是INPUT FILE不支援的問題

絕大部分人都遇到了微信內建瀏覽器中input file元素點選沒反應的情況,這其實並不是微信的錯,微信沒有做任何事情來限制你。

這個問題只存在於Android4.4或以上版本的系統,4.4以下是沒問題的,IOS當然也是沒有任何問題。所以這是google的錯。從Android4.4以後的Webview中移除input file元素的支援,是出於系統安全問題的考慮。

那webview網頁要上傳檔案怎麼辦呢?

如果是你自己自行開發的APP,那麼簡單,你可以在APP層面上對Webview元件進行擴充套件,使其支援input file。方法請谷歌或百度,現成程式碼大把,而且不難。

如果APP並不能由你來控制,比如你的網頁想在微信安卓版內建瀏覽器中上傳檔案,那麼就不能想著讓騰訊去改微信程式碼讓他支援input file了,他們不會理你的,就算是理你,那也不能馬上解決問題,讓幾億使用者更新到最新版本,不是那麼容易的事情。

但是,難不到我,好在微信留下了一條活路給你走,實在不行,引導使用者跳出微信,讓他們點選右上角選單“在瀏覽器中開啟”,哈哈。使用者體驗差了點,但是起碼能實現上傳啊。

此外,還有兩點要提一下:

一,不同的瀏覽器,對input file的實現是不一樣的,安卓下的瀏覽器,大多不支援多選,一個input file只能選一個檔案。

二,微信的JSSDK有照片選擇、上傳、下載功能,使你能呼叫微信本身實現的功能,但是非常操蛋,無法用來解決input file不支援的問題。

選擇照片功能,得到localID,是一段微信協議的url,類似“weixin://3456345345/345hg345g34”。此url可以放進img.src中顯示圖片,但是無法獲取它的資料來儲存到自己的伺服器,當你試圖用canvas來轉化獲取img的base64格式資料時,會引發“SECURITY_ERR:DOM Exception 18”異常,這是一個跨域安全限制,對於“weixin://”協議,根本無法通過服務端把它的域轉換過來。

上傳功能,使用localID,把圖片上傳到微信伺服器,得到一個ServerID有效期3天。媽的,上傳到微信伺服器,有什麼用。

下載功能,更離譜,使ServerID從微信伺服器下載一個檔案,下載後,你得到一個localID。那下載下來有什麼用?只能放到img中顯示一下。