一例flash在Safari浏览器显示异常的bug
来源:互联网 发布:淘宝证书 编辑:程序博客网 时间:2024/05/16 08:27
问题症状:
某个项目中,需要调用window.open()打开一个新窗口,里面会加载一个包含flash的页面。
其它浏览器都没什么问题,但是在Windows XP/7 & Safari 5.1.2 & Adobe Flash Player 11.1.102.55环境中,有相当大的几率会出现如下症状:
弹出新窗口中应该显示的flash的区域,开始会显示一片白板;直到被点击一次,者调整窗口大小,或者切换一次活动窗口之后,才会显示flash内容。
问题原因的查找:
尝试过很多方法,包括以下:
- 直接使用静态<embed>而非动态插入<object>标签来载入flash。
- 更改flash的wmode属性。
- 使用document.wite()或者innerHTML动态生成flash标签代码。
但这些都没有从根本上杜绝bug的出现。
另外还发现:
- 点击打开新窗口的按钮后,立即用鼠标做一些无规则的交互(比如瞎晃动,点击其他窗口,拖拽文本等等),bug重现的几率貌似会高一些。
- 在页面里面同时加载多个flash时,bug重现的几率貌似会很低。
当然上面不排除很多偶然因素,仅凭这两点也还不够充分解释问题的原因。
问题的解决:
最后还是拿出了杀手锏:setTimeout()。
这一招对于很多js的疑难杂症都有妙不可言的效果。
代码示例如下:
window.onload = function() {window.setTimeout(function() {document.body.innerHTML = ('<embed ... ></embed>');}, 100);};经过反复的测试,bug在这种写法下暂未再出现:窗口弹出后,flash能够自动显示了,无需再去点击窗口或做其它什么操作了。
暂时可以认为bug出现的几率为0%了。
PS:实际中因为其它需要,最后setTimeout()中加载flash的代码改为了使用swfobject动态加载。
当然因为我还未作更多测试,所以不能保证只用swfobject也能解决这个bug,虽然swfobject内部可能也用到了setTimeout()。
结论:
关键是证实了这个问题:延迟一定的时间再加载flash,基本上可以消除此bug的症状。
参考:
http://code.google.com/p/swfobject/
- 一例flash在Safari浏览器显示异常的bug
- Jquery Ajax同步在mobile safari浏览器中运行异常
- safari浏览器下 localStorage会报错的BUG
- Menu控件在Chrome,Safari,360浏览器显示不正常的解决方案
- Ext.form.DateField在chrome、safari下显示异常的解决方法
- flash在360、腾讯浏览器下的显示出错问题
- safari的bug
- iframe在ipad safari的显示
- safari浏览器数字显示长度不一致的问题
- Jquery delegate 在iPhone的safari下有bug
- Apple的浏览器-Safari
- html页面在IOS-safari浏览器下绑定点击绑定事件的div时会显示灰色框的问题
- safari无限alert的bug
- 在ie,fierfox浏览器中,div层飘在flash上面显示的问题
- 完美解决safari、微信浏览器下拉回弹效果和上拉空白的bug
- FLASH轮播广告 在谷歌浏览器中不显示的解决办法(FLash轮播放广告在谷歌浏览器中无法显示处理方法)
- mac Safari 浏览器设置多页显示
- 调用 safari浏览器的方法
- 跨表查询数据的方法
- Oracle中生成GUID类型
- J2SE共享软件JFlash的更新日志(2012-02-01)
- Cilk所有内容
- SVN 技巧 <继续更新>
- 一例flash在Safari浏览器显示异常的bug
- IIS 7.5 HTTP 错误 500.19 - Internal Server Error 的解決方法
- eclipse奇淫技巧
- 电影 -- 碟中谍4
- 访问iis元数据库失败怎么解决
- Cilk介绍
- jdk配置环境变量
- Hadoop:从初出茅庐的小象变身行业巨人
- More Effectvie C++笔记(一)--指针与引用区别,C++风格的类型转换