- 浏览: 16763 次
最新评论
这段时间做个项目,要涉及到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): 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; } /* 在父页面中调用该函数更改该页面的内容 */ function setText(content) { document.getElementById('successTips').innerHTML = content; } 父页面中的部分代码: 于是,可以将所有想动态显示在flash上的提示信息放到一个网页中,通过iframe标签嵌入到父页面中(设置该iframe默认隐藏)。当需要显示提示信息时,显示该iframe就好了。
注:个人感觉这种方法有点山寨,不是正规的解决办法,但是,好歹也是一种解决办法不是,只是我这中项目需求中,这种方法是最省事的^_^
发表评论
-
如何高效地进行远程大规模字符串比较问题
2012-07-06 09:52 680关键字 (keywords):大规模 字符串 匹配 远程 ... -
java 使用正则来过滤字符串中的特殊字符
2012-07-06 09:45 985Pattern pattern1 = Pattern.co ... -
正则表达式(初识笔记)
2012-07-06 09:38 649............................. ... -
ps画个矩形框,如何设置线宽
2012-07-06 09:30 1876i am now in university(HIT@We ... -
父页面iframe自适应子页面高度
2012-07-05 20:45 1363父页面有table,有tr,td。td中有iframe。页 ... -
ADF中组件无法显示问题
2012-07-03 13:44 800在ADF开发过程中,偶尔会遇到一些组件甚至页面无法显示到问 ... -
Flex 4 设置背景图片 Canvas backgroundImage BitmapFill fillMode
2012-07-02 12:45 969Flex 3中Canvas是可以设置backgroundI ... -
Flex中,跨List实现SHIFT多选的例子
2012-07-02 12:45 615最近工作中遇到的问题,客户要求做这么个东西。还是稍微 ... -
Flex中本地图片上传前的预览
2012-07-02 12:45 782height="345" h ... -
Flex Panel 拖动效果例子
2012-07-02 12:45 6232010-08-06 今天在flex下尝试了下panel ... -
Ext 4 概述(六)之Grid
2012-07-01 10:07 568这次升级Ext 4全部 ... -
也谈jQuery之学习
2012-07-01 10:07 671由于之前一直是做 ... -
深度剖析WinPcap之(十)――数据包的内核过滤(13)
2012-07-01 10:07 1394数据包到达网络接 ... -
Flash Builder 4-找不到所需的 Adobe Flash Player
2012-07-01 10:07 659比较懒,比较少上csdn的,如果发现留言给我没有回复,望见 ... -
Flex组件:Style的使用
2012-06-30 16:32 699Flex组件:Style的使用 2010 ... -
Flex中Bindable的原理
2012-06-30 16:32 590Flex中Bindable的原理 2011年11月01日 ... -
Flex AIR)创建“不规则形状”的Air透明窗体
2012-06-30 16:32 884Flex AIR)创建“不规则形状”的Air透明窗体 201 ... -
如何在flex当中使用swc
2012-06-30 16:32 763如何在flex当中使用swc 2 ... -
FLEX和Actionscript开发FLASH游戏7-3
2012-06-30 16:32 411FLEX和Actionscript开发FLASH游戏7-3 ...
相关推荐
firefox下当flash设置参数 wmode 为 transparent 或者 Opaque 时候文本框中输入中文会出现问题。
( 解决FLASH有背景色 使FLASH透明不被遮挡.txt 概述:我们常遇见FLASH添加后有背景颜色和FLASH总是遮挡着其它效果或漂浮广告等问题?下面我们介绍给大家解决这一问题的方法:使FLASH变透明 如果要用到...
无论怎么设置flash容器和层的深度(z-index)也无济于事,现有的解决方案是在插入flash的embed或object标签中加入”wmode”属性并设置为wmode=“transparent”或”opaque”,但wmode属性到底是什么意义,为什么可以解 ...
1.Flash设置透明,<param name=wmode value=transparent> 2.注意<embed中的 wmode=transparent… 代码 复制代码代码如下: <object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”...
1.<... 2.<body> 3. 4. //SysDownloadFlashFashion等于0时就是本地下载 ...//FireFox,Chrome 112.} 113.if(!swf) 114.{ 115. InstallFlash(); 116.} 117.[removed] 118.</html>
<param name="wmode" value="transparent" /> <param name="menu" value="false" /> <embed src="swf/4imgflash.swf" width="550" height="280" quality="high" pluginspage=...
VB结合Flash实现动态按钮,当Flash按钮命令为Norksoft Studio时触发,若要让Flash背景透明,请在Flash的 WMode 属性设置为Transparent,ShowMsg = MsgBox("哈!你刚才单击了【点击下载】按钮", 64, "温馨提示") '打开...
FireFox和Chrome下: 复制代码代码如下: <embed src=”http://player.56.com/v_ODk4OTI0NjA.swf” quality=”high” width=”480″ height=”405″ wmode=”transparent”></embed> 完整格式: 复制...
distr 设定: true或false 如果设置为true时,标签均匀分布的球的表面。 tcolor Hex颜色值: 0xff0000 for red. 标签典型显示颜色 tcolor2 Hex颜色值 根据标签热门程度显示梯度颜色 hicolor Hex颜色值 鼠标悬停颜色...
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" ...使用时替换“音乐.mp3”文件为你自己的文件名
<object type="application/x-shockwave-flash" width="400" height="220" wmode="transparent" data="flvplayer.swf"> <param name="movie" value="flvplayer.swf" /> <param name="wmode" value="transparent" /...
pluginspage=http://www.macromedia.com/go/getflashplayer src=http://file.edmin.cn/2010/day_110109/20110109_1788337d0cee0c568e62Qqq2iu2LA0qu.swf width=660 height=480 type=application/x-shockwave-flash ...
flv 播放器 flash swf flv用法 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=" http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="480" ...
如果你仅需要播放一个FLV文件[例如“video.flv”],那么只要把“video.flv”和压缩包内的flvplayer.swf复制到同一个目录内,然后在页面内添加 ...如果载入影片时不需要自动播放,可以使用“autostart”参数
属性:src=url(Flash路径)width=像素/百分比(flash宽度)height=像素/百分比(falsh高度)wmode window 使 flash 自身的矩形窗口来播放opaque 使 flash 隐藏页面上位于它后面transparent 使 flash的 背景透明 ...
<param name='wmode' value='transparent' /> <embed src='flash/r.swf' quality='high' pluginspage='...
让flash置于DIV层之下的方法,让flash不挡住飘浮层或下拉菜单,让Flash不档住浮动对象或层的关键参数:wmode=opaque。 方法如下: 针对IE 在<object></object>内加上参数<param name=wmode value=...
//<script>LoadFlash('url','transparent',803,225)</script> function LoadFlash(url,wmode,width,Height) { var flashcode = '...
情景1(可修改flash的wmode参数)修改wmode属性为,transparent或opaque DEMO如下: 复制代码代码如下:<!doctype html><html lang=”en”><head> <meta charset=”UTF-8″> <title> ...