wmodeのもたらす不具合


Flashで背景を透過させるときにHTMLのSWFObject部分にwmode=”transparent”;と書くこともあると思いますが、これが結構不具合(仕様?)が多く、安易に使えません。

さっと確認した感じではwmodeをきちんと設定しないと、以下のような不具合が出たり出なかったりします。(FlashPlayerのバージョンによって変わるものもあります。)

  • ブラウザによってポップアップブロックに引っかかったり引っかからなかったりする
  • 文字入力がブラウザによってインライン入力できたりできなかったりする
  • ブラウザによって日本語入力ができたりできなかったりする
  • CSSのz-indexがwmode=windowでは無視される(Flashが最前面に表示される)

などなど

このできたりできなかったりする、というのが曲者です。ブラウザによってFlashが違う動作をするときはまずwmodeを疑うと良い気がします。
Flashは全部のブラウザで動くんだぜーとかやってると返り討ちにあいます。wmodeの設定によってはちゃんと動くようになる場合がありますが、こいつがやっかいなのは、ブラウザごとに動作を分ける必要があって、

  • wmode=transparent
  • wmode=window
  • wmode=opaque
  • wmode=direct
  • wmode=gpu

のどれが適切かはFlashとブラウザとOSによって異なるので、ブラウザごとに適切なwmodeを選んでいく必要がある場合があるということです。

以前にWindows7のChromeで日本語入力ができない、というのに悩まされました。これは一時wmodeを設定しないか、windowに設定すれば動くものの、それ以外だと動かない、という状況だったんですが、あとになって、逆にopaqueかtransparentにすると動くという風になったりでもうちんぷんかんぷんです。(検証が不十分だったのかもしれないですけれど。)

さきほど確認したところではWindowsで以下の不具合はまだあるようでした。

  • Windows + Firefoxだとopaque/transparentで日本語インライン入力ができない(Win7 + Firefox + FlashPlayer11.3で確認)
  • Windows + Operaだとopaque/transparentで日本語が入力できない(WinXP7 + Opera12 + FlashPlayer11.3で確認)

Flashのバージョンによりけりの可能性もあるので、transparent/opaqueを使う場合はいつもより念入りにチェックする必要がありますね。特に文字入力がある場合は。

Macではインライン入力ができない…というのがありますが、もともとどのブラウザでも、どのwmodeでもできないのであんまり関係ないですね。(どこかで、仕様なのでインライン入力できるようにはならない、と言われていた気がする。)

ちなみにwmode=window / direct / gpuはそれぞれ動作に違いはなさそうでした。検証が不十分なので、実際に使われる場合はFlashといえどブラウザのチェックは必要かと思います。特に日本語入力は一切できないものもあるので。