正在加载...

本文的结论就是说:尽量不设置flash的参数wmode(默认为window)为非默认值,因为其他值在跨浏览器支持中会遇到很多让人抓狂的中文支持问题和交互问题。

Ok,先解释下flash的参数吧。

window:窗口模式,在没有指定wmode的时候,flash默认是以这种方式创建的。在这种模式下,flash拥有自己的窗口句柄,从而相对独立于浏览器的页面表现,独立的进行表现和渲染,所以窗口模式是相对其他模式来说效率最高的一种。同时也是因为它独立于浏览器的HTML渲染表面,所以当html的表现层和flash的表现层重合的时候,flash总是会遮住位置与他重合的所有html层。eg:你要做一个模态的提示框,想让灰色覆盖整个页面,但在有flash的情况,flash会不管你html中z-index的设置而表现在上层。 于是,就引出了第二种模式。

transparent :透明模式,这种模式类似于把flash放到html层结构里,可以通过z-index来进行层表现的传递和高度。在这种模式下flash会让可以透明的html层都以透明的方式展示在自己之上。这种对动画的性能表现的非常差,而且在9.0.115之前的flash player版本设置wmode=”transparent”会导致全屏模式失效。

Opaque:非透明模式,整个是相对于transparent方式来说的,它使flash隐藏html层上所有位于它后面的所有内容。

那么在我们实际应用中,例如模态提示,例如flash右键属性扩展,我们都需要用到wmode=”transparent”或者“opaque”,为什么这么webryan不建议使用呢?

因为 Flash player 存在一个bug,对使用非默认模式,即wmode不等于”window”的时候,在 Firefox/Chrome浏览器下,不支持非英文的文字输入。

bug单见:http://bugs.adobe.com/jira/browse/FP-501=20,

这个bug影响到flash player 10.1以下的大部分版本。其表现就是:你在flash player 10+firefox上的flash上输入中文的时候,会显示乱码。 这个bug 在10.1版本以后得到了fix,但目前来说还是影响了绝大部分用户,建议采取其他方案进行规避。

同时,wmode=transparent+marquee的场景,会出现鼠标不停的闪动的问题。(这个bug跟了好久。。 郁闷。)

: http://www.webryan.net/2010/11/do-not-use-wmode-on-flash/

本文相关评论 - 才一条评论
2011-08-04 13:38:54

学习下
文章写得不错

[回复]