|
最近做的事和Flash打交道比较多,简单来说,就是要在第三方的页面引入一个Flash的广告,播放一会,让用户能够关闭。
起初总觉得,就引入一个Flash嘛,adobe都给出了官方的使用方法,直接拿来用不就成了。顶多IE下不支持object元素的appendChild,大不了拼接字符串然后通过innerHTML来创建就好了。
但是真正做的时候,开始测试各个浏览器的时候,才发现情况远没有想的这么简单
关于如何引入Flash
这大概是最基本的问题,其他的一切问题都是基于Flash可以正确引入到DOM中这个前提的。
最先的方式自然是使用adobe给出的官方方式,即objectembed //object的结构来嵌入一个Flash。根据各种资料,embed标签用于Firefox,而object标签用于IE,两者合在一起,就是一相相对完美的方式。
但是事情绝对不会就这样完结,这个时候号称最先进最标准的Chrome浏览器过来插了一脚:当使用objectembed //object结构来嵌入Flash时,在Chrome中会出现Flash不显示的问题。
关于这个问题,他必须有2个前提:
- 使用objectembed //object的结构引入Flash。
- 在object前,有一个元素有background-image。
当以上两个条件都满足时,如果打开这个页面,特别是在本地打开,有一定机率会看不到Flash。但是Flash确实存在,甚至连Flash的声音都可以听到,仅仅是浏览器没有将其绘制在屏幕之上。
由于该问题与网络环境有着联系,在本地特别容易重现,可以将这个页面的源码保存为一个htm文件,在本地打开,刷新几次,应该就能看到这个问题了。
为了这个问题,最后决定推翻objectembed //object的DOM结构。因为object和embed两者是独立的,因此就在各浏览器之间测试了标签的兼容性,得出的结果是embed标准可以被现有的几乎所有浏览器支持,包括了IE、Firefox、Chrome和Opera。最后,也在这篇文章上对引入Flash的方式有了最终的确认,仅使用embed标签足够引入Flash。而在去除object标签后,Chrome下的诡异问题也随之消失了。
关于如何移除Flash
又是一个看上去很简单的问题,最简单地代码自然是:
var element = document.getElementById('someFlash');
element.parentNode.removeChild(element);
it知识库:引入Flash那些事,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。