昨天upload在firefox下出現uploadify:Some files were not added to the queue: The file xxx" is empty.錯誤,于是升級了flash插件解決了這個bug。但是今天重啟后發現firefox下uploadify盡然不會生成flash dom對象了,顯示的是原始的html dom對象,但是chrome下是好的。
chrome下uploadify生成了flash對象
firefox下uploadify顯示的是DOM對象,沒有生成flash對象
查看firefox的附件組件后發現安裝了2個flash插件,一個是Shockwave Flash 8.0.22.0,一個為Shockwave Flash 18.0.0.232。
查看uploadify插件獲取判斷flash是否安轉和版本的代碼如下
var playerVersion = swfobject.getFlashPlayerVersion();var flashInstalled = (playerVersion.major >= 9);//下面2句自己增加調試用的console.log( playerVersion)console.log(flashInstalled )
結果發現swfobject插件獲取到的flash版本是最老的8,小于9導致flashInstalled為false,所以uploadify沒有執行生成flash對象的代碼。
代碼運行完畢后通過開發工具查看swfobject.ua.pv存儲的為flash版本,并且是最新版本的。swfobject內部有個V函數在body中重新更新過swfobject.ua.pv值,初始化獲取到的是navigator.plugins[“Shockwave Flash”].description的內容,由于存在2個版本,不懂firefox搞什么飛機這個值存儲的是舊版本的。解決辦法就是在getFlashPlayerVersion前調用下V()方法更新swfobject.ua.pv即可。
getFlashPlayerVersion: function () {V();///// return { major: M.pv[0], minor: M.pv[1], release: M.pv[2] }; }
更改getFlashPlayerVersion函數增加執行V()后注意初始化uploadify要放到$(document).ready事件中,因為執行V()會引用到body對象,如果只內嵌代碼直接初始化uploadify可以執行V函數報錯,除非你的內嵌js代碼放在</body>結束標簽之后。
還有一個辦法就是將舊版本的flash插件卸載掉,一般在“系統盤:/Windows/system32/Macromed/Flash”路徑下有NPSWF32.dll這種dll文件,firefox插件有多個版本flash,會存在多個NPSWF32開頭的dll文件,后面是版本號之類的,找到舊的刪除或者重命名,然后重啟firefox后就可以刪除插件了。
新聞熱點
疑難解答