昨天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后就可以删除插件了。
新闻热点
疑难解答