过程是这样的:
DOM ready的时候我在页面嵌入了flash,flash初始化完成,然后开始执行,这时用户触发了一个弹窗操作将 body的overflow设置为了hidden,这时flash重新加载了,flash正在进行的进程被打断,和flash交互的js开始报错。
猜想可能是用户触发的弹层覆盖了flash,我试着改变 flash的 position 来移动flash 位置,比如移出可视区域,这时有的版本的火狐flash初始化都不执行了,可以初始化的版本一样存在flash重新加载的bug。接着我试着修改z-index,使flash不被覆盖,结果都是没有解决问题。
既然在本页面不可以,触发了页面reflow,我试着将在页面嵌入一个iframe,iframe再嵌入flash,但火狐下竟然也会触发iframe内的flash重新加载,再次失败。
改变flash的位置和层级都能解决问题,好像已经山穷水尽。但是我们终于找到解决办法,既然改变body触发了reflow,我们将flash嵌到了body以外.
//创建元素
var el = document.createElement(‘div’);
el.id = ‘flashcon’;
document.documentElement.appendChlid(el);
//than 嵌入 flash,需要引入swfobject.js
swfobject.embedSWF(”);
好的,在浏览器是火狐时,我们将flash单独嵌入到body以外,问题得到解决。