引入Flash那些事

  最近做的事和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那些事,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。