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