一、前言
这段时间做个项目,要涉及到flash开发。真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发有点像,渐渐摸到些门道,功能也开发得差不多了。于是,就像墨菲定律所述,Anything that can go wrong will go wrong(如果坏事有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失),遇到一个巨恶心的问题,和大家分享下。
二、问题描述
在HTML文件里有一个嵌入的flash,该flash中有一个输入文本框。
由于flash在嵌入HTML代码中时,wmode参数默认被设置为了window模式,这导致该flash下的所有HTML元素都会被隐藏。因此,如果想在该flash上显示一个登录框(提供用户登录,这是很正常的功能)或是在该flash上显示一个div,必须要将flash的wmode参数设为opaque或transparent(这个问题在我的另一篇文章 中有描述)。
但是问题来了,在IE下该flash中的输入文本框中是可以输入中文的,但是在非IE内核的浏览器中(如Firefox和Chrome)下无法输入中文(可以输入英文)。究其原因是因为Flash的这种模式很少用到,这是一种无窗口模式,绘制和输入取决于浏览器,这种模式对于Flash来说, 绘制效率比较低,但是可以作为HTML的层来使用,并支持透明,因此在国内还是挺常用的。由于这种模式Flash控件接收的输入来自浏览器,因此需要浏览器对Flash的wmode特殊处理。很不幸的是,除了IE对Flash ActiveX的wmode下的透明绘制和中文输入处理的很完美,别的浏览器都支持的很差。有的甚至连透明都绘制成一