處理代碼的兼容性是前端攻城師們的家常便飯了,一般是對各種瀏覽器進行兼容性處理。但是有時候我們也會遭遇到瀏覽器以外的影響因素,這個是經常會被忽視掉的內容。比如前幾天就聽說客戶端安裝迅雷、暴風影音等軟件會修改http連接數,從而影響瀏覽器的http并發數。今天有幸,讓我見識了另一個因客戶端安裝個別軟件而造成的程序兼容問題。罪魁禍首便是金山WPS2013.
故事的開始是這樣的。。。我用HTML5寫了一個文件上傳插件,其中使用到了file API,在驗證文件類型的時候使用了file.type獲取的文件MIME類型,如果獲取的值在允許列表中,就讓其通過驗證。插件寫完了,應用到了項目中,提交測試了,一切都很順利。
然后今天,一個測試MM卻來找我,說文件上傳功能不好使,明明選擇了一個word文件,卻提示“文件類型不允許”。剛開始我還不屑一顧,以為肯定是她的操作有問題,但是當我親手試了一遍后,發現確確實實是有問題!一個普普通通的word文件而已,能有什么蹊蹺?于是我順著流程打印出來一些調試信息,發現了一個驚天大陰謀,在測試MM的機器上,獲取到的這個word文件的MIME類型竟然是application/kswps。并不是doc文件正常的application/msword,或是docx文件的application/vnd.openxmlformats-officedocument.wordprocessingml.document。遂詢問妹子的機器是不是安裝了金山WPS,得到了肯定回答。從名字不難看出,文件的MIME類型被金山WPS給修改了(雖然給文件是用微軟office創建的)。有圖有真相:
未安裝WPS,獲取到的doc和docx文件的type都是正常的
安裝WPS2013后,doc和docx文件的type都變成了application/kswps
由于我的允許列表中沒有這樣的值,自然也就不能驗證通過了。解決辦法用腳趾頭都能想出來,把這個application/kswps也加到允許列表中不就OK啦~正當我以為這就解決了問題準備卸載掉WPS時,誰知故事還沒有結束。。。請看我卸載掉WPS后獲取到的type值:
沒有了?沒有了!變成空了!尼瑪,金山你到底對我的電腦做了什么!拿不到type值了,那我還怎么驗證。
隨后,我修改了文件類型驗證方式,通過后綴名來檢查,這樣就不會受到MIME類型不一致的干擾了。問題雖然就此解決,但心中始終留有一絲對金山WPS的不解。另外,以上這種情況只出現在金山WPS目前的最新版9.1上,也就是WPS2013。我試著安裝了8.1版本,是沒有這個現象的。不知金山WPS是否會注意到此問題。
文章列表
留言列表