这段时间做个项目,要涉及到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下的透明绘制和中文输入处理的很完美,别的浏览器都支持的很差。有的甚至连透明都绘制成一片黑色,就一个简单的IME输入,都 懒得解决。比如Firefox论坛上,这个问题从若干年前就被人发现了,一直无人修改,不光中文,所有依赖于IME的输入都不行,包括欧洲一些国家的输入法。
  这个BUG存在好几年了,这很不幸,但是更不幸的是被我这个刚接触flash开发的新手碰到了……听说Flash Player 10.1终于修正了这个问题,可是,你不能保证用户会升级到最新版的Flash Player啊。所以可能的话,我还是应该想个办法搞定他。
  1. 页面上放置一个html的textfield,AS封装一个TextField,通过AS和JS通讯,在需要输入的时候把这个输入框挪过去。
  优点:支持各种输入法,支持输入框右键
  缺点:不够优雅,AS和JS互通迅,JS加载失败则没戏
  2. 实现一个带中文输入法的TextField,用这个框替代所有的TextField
  优点:干净优雅,不容易出错,兼容性好
  缺点:只支持自己实现的输入法,易用性差
  3. 点击的时候重建flash,设置wmode的参数值为transparent,然后重新加载flash。
  注:改变了flash的显示参数需要重新load的
  优点:可以解决该问题@@
  缺点:只要显示html,就得重新加载flash
  4. 利用ExternalInerface与JavaScript window.prompt import flash.external.*; // 将 js function 宣告出去,(也可以直接写在Html网页中) ExternalInterface.call("eval", "function getInput(hint){return window.prompt(hint, '');}"); // 利用 ExternalInterface 呼叫 JS function,并取得 User 输入文字 function doInput() { inputTxt.text = ExternalInterface.call("getInput", "请输入文字"); } 优点:可行……
  缺点:以弹出对话框形式出现,用户体验不够好。
  5. 使用thickbox( http://jquery.com/demo/thickbox/)这个opensource的JS工具,可以单纯传参数这个工具就会帮忙建立iframe,可以兼容IE和FF。
  注:该方法未经过测试。
  6. 使用swfInputs。详见 http://blog.sebastian-martens.de/2009/05/swfinputs -solving-mozilla-transparent-mode-win-special-chars -within-inputs/
  优点:利用javascript动态增加input标签来解决。效果很好
  缺点:可惜是Flex版,对我这种只用Flash开发的人没有用
  7. 使用SwfText。详见http://blog.webgene.com.tw/?cpage=1&p=2328
  注:该方法属于Beta版,对我这种菜鸟不实用。
  没办法,网上搜了N多方法,没一个适合我的,靠……自己动手,丰衣足食,来吧!
  首先,IE内核的浏览器下,wmode参数设为opaque或transparent都可以,输入文本框中可以输入中文。
  其次,在非IE内核的浏览器下,解决方法如下。
  在嵌入flash的时候将wmode参数设置为window模式。
  一个很偶然的发现,在通过iframe标签引入一个网页时,在某种很特殊的情况下(可能不止这一种情况),该iframe中显示的内容可以覆盖在flash上。
  条件:给body标签增加background-color属性@@。
  下面给出一个通过iframe嵌入的网页的内容(showTips.shtml): style type="text/css"> body { background:url(http://mat1.gtimg.com/auto/datalib/ component/auto_kj_pic_03.gif) no-repeat; background-color:#fff; padding:0; margin:0px; width:220px; height:51px; } style="font-size:14px; color:#fff; width:220px; height:51px; line-height:51px; text-align:center; " id="successTips" name="successTips"> /* 在父页面中调用该函数更改该页面的内容 */ function setText(content) { document.getElementById('successTips').innerHTML = content; } 父页面中的部分代码: style="display:none;position:absolute; left: 100px; top: 347px; z-index:200; width:220px; height:51px; padding:0; margin:0px; text-align:center;" οnmοuseοut="window.setTimeout(function(){$('succes s_div').style.display = 'none';}, 1000);" > 于是,可以将所有想动态显示在flash上的提示信息放到一个网页中,通过iframe标签嵌入到父页面中(设置该iframe默认隐藏)。当需要显示提示信息时,显示该iframe就好了。
  注:个人感觉这种方法有点山寨,不是正规的解决办法,但是,好歹也是一种解决办法不是,只是我这中项目需求中,这种方法是最省事的^_^

Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法...相关推荐

  1. Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法

    一.前言 这段时间做个项目,要涉及到flash开发.真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发 ...

  2. 开发chrome 插件, background.js中 console log 看不到解决方法

    开发chrome 插件, background.js中 console log 看不到解决方法 参考文章: (1)开发chrome 插件, background.js中 console log 看不到 ...

  3. Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved?

    Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved? 参考文章: (1)Myeclipse开发环境下文件 ...

  4. windows下SVN日志反馈中文乱码的解决方法

    windows下SVN日志反馈中文乱码的解决方法 参考文章: (1)windows下SVN日志反馈中文乱码的解决方法 (2)https://www.cnblogs.com/wangkeqin/p/11 ...

  5. 在Windows 7下安装U871或U872,在检测组件窗口时,出现MDAC组没有安装的提示的解决办法...

    在Windows 7下安装U871或U872,在检测组件窗口时,出现MDAC组没有安装的提示的解决办法 在Windows 7下安装U871或U872,在检测组件窗口时,会出现MDAC组没有安装的提示, ...

  6. 卸载ncurses_Linux下程序库Ncurses显示中文乱码的解决方法

    Ncurses是程序库,使用最多的组件是窗体,在Linux系统操作中,不少朋友使用Ncurses的时候遇到中文乱码问题,遇到该问题要如何处理呢?下面小编就给大家介绍下Linux使用Ncurses时出现 ...

  7. java实现动态展示当前时间,在文本框中动态地显示当前时间,有木有人做过,指导下初学者...

    在文本框中动态地显示当前时间,有木有人做过,指导下菜鸟? 想在两个文本框中,一个动态显示日期,一个动态显示时间. 如下图这样: 不过这是静态的. 虽然网上有动态的代码,但是javascript的. d ...

  8. windows下cmd中输入nvidia-smi显示不是内部或外部命令解决方法!

    windows下cmd中输入nvidia-smi显示不是内部或外部命令解决方法! 我的cuda.cudnn等都是可以正常使用的,只是查看不了显存,在查看了很多博客后下面这个方法亲测有效: 在环境变量的 ...

  9. Linux下通过rm -f删除大量文件时提示-bash: /bin/rm: Argument list too long的解决方法...

    Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...

最新文章

  1. 学习资源:在线学习 Python(二)
  2. mvc登录实例 mysql_spring mvc + mybatis + mysql 调整的一个简单的登录例子
  3. WINDOWS XP 开始→运行→命令 集锦
  4. Swift: 用Alamofire做http请求,用ObjectMapper解析JSON
  5. Java调用Python脚本工具类
  6. LD(Levenshtein distance)莱文斯坦距离----编辑距离
  7. (二)Linux下的crontab定时执行任务命令详解
  8. lvm-snapshot:基于LVM快照的备份
  9. Mybatis源码阅读(一):Mybatis初始化1.2 —— 解析别名、插件、对象工厂、反射工具箱、环境
  10. ScaleGestureDetector使用注意事项
  11. x射线直接投影成像的条件_告诉你如何区分X射线DR、CR和胶片成像?
  12. 安装php的mongodb扩展
  13. 慎重选择博士后(或博士生)导师
  14. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_10_字节输入流一次读取一个字节的原理...
  15. 手游录像分享传播实战攻略——《钢琴大师》
  16. ANSI字符集和Unicode字符集
  17. Charles安装SSL证书失败问题
  18. hive sql中常用技巧
  19. 三进制计算机/打破二进制的瓶颈?
  20. linux c语言lzma,LZMA 算法简介

热门文章

  1. Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用)
  2. 为什么索引会加快查询速度?索引原理和使用原则
  3. 社招(0-8年经验届均可投!)阿里菜鸟急求大量后端JAVA
  4. 1-Java面试题-基础篇
  5. 迭代器中遍历元素时用到的next()方法的详解
  6. Forter在过去12个月营收翻番;融资3亿美元,估值达到30亿美元
  7. 2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】
  8. 不得不批,铁道部售票网
  9. 【VTM10.0】帧内之PDPC技术
  10. 一个简单的购物车加减按钮