IE で Flash ムービー(foo.swfなど)を innerHTMLなどで動的に埋め込むと, VBスクリプトでイベントを取れなくなるのが原因のようです。
対策は、SWFObject FAQに書かれているように
5.なぜ動的なパブリッシュを行うとインターネットエクスプローラーで fscommand が動かなくなるのか。
Adobe は fscommand をインターネットエクスプローラーで動作させるため、
FSCommand 呼び出しを受け取り JavaScript に転送するための VBScript を追加するように推奨しています。
ですが SWFObject の動的なパブリッシュメソッドで行っているように、
innerHTMLや outerHTML などを使って Flashムービーを挿入する場合には VBScript は全く動作しません。
運がいいことに、VBScript の代わりに JavaScript を使っても fscommand の呼び出しを受け取る方法があります。
このちょっと下にあるコードではプロプライエタリ(訳注:専用の?)属性(を、あなたのコードをおかしくさせないために、さらに条件分岐コメントで括ったもの)を使っています。
例として、下のVBScriptは、<SCRIPT LANGUAGE=VBScript>
on error resume next
Sub myCom_FSCommand(ByVal command, ByVal args)
call myCom_DoFSCommand(command, args)
end sub
</SCRIPT>次のように置き換えることが可能です。
<!–[if IE]>
<script type=”text/javascript” event=”FSCommand(command,args)” for=”myCom”>
myCom_DoFSCommand(command, args);
</script>
<![endif]–>
注意:Flash 8 以上でパブリッシュしている場合、JavaScript – ActionScript間の通信には fscommand() を利用するよりも ExternalInterface が推奨されています。
コードの例は SWFObject のテストスイートでも見つけることができます。
参考:
– FlashとJavaScriptの連携
– SWFObject v2.0 ドキュメント日本語訳
– Why doesn’t fscommand work in Internet Explorer with dynamic publishing ?(SWFObject FAQ)
– ExternalInterface(ActionScript 3.0 コンポーネントリファレンスガイド)