uploadify在firefox中无法使用生成flash对象

  昨天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下是好的。

uploadify在firefox中无法使用生成flash对象
chrome下uploadify生成了flash对象

uploadify在firefox中无法使用生成flash对象
firefox下uploadify显示的是DOM对象,没有生成flash对象

  查看firefox的附件组件后发现安装了2个flash插件,一个是Shockwave Flash 8.0.22.0,一个为Shockwave Flash 18.0.0.232。

uploadify在firefox中无法使用生成flash对象

uploadify在firefox中无法使用生成flash对象

  查看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对象的代码。

uploadify在firefox中无法使用生成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后就可以删除插件了。

加支付宝好友偷能量挖...


原创文章,转载请注明出处:uploadify在firefox中无法使用生成flash对象

评论(0)Web开发网
阅读(1147)喜欢(1)JavaScript/Ajax开发技巧