わかったぞぉぉぉっぉおおぉおお!!!!
やぁあああっとわかった。原因が。
ExternalInterfaceにハマるにて、Firefoxのみ、ExternalInterface.callbackで登録した関数をコールできない原因(not a function になる)が。
HTML,JavaScriptの編集は、Dreamweaver8で行っている。
当然、swfを挿入すると、IEのクリックしないとアクティブにならないやつに対処するための、AC_FL_RunContent()というのが、自動的に挿入される。つまり、Objectタグ、embedタグを動的に出力して、それを回避するのである。
ExternalInterfaceを動かす場合、html中に挿入したswfに対して、
objectには、idを、embedにはname属性を付け、その名前を用いて、swf中の関数にアクセスする。例えば、
(※thisMovieについては、このあたりを参照されたし)
で、AC_FL_RunContentを使うと、
といったコードが生成される。
これがガンだったのだ。(※noscriptの中も同様)
AC_FL_RunContentでは、objectタグに、idとnameの両方が設定されてしまい、これがFirefoxでは問題となるようだ。
FIrefoxにおいては、objectタグには、idを。embedタグにはnameをだけを設定しなければならないようだ。(IE,Safariでは重複していてもOK)
ならば、AC_FL_RunContentを使わなければいいのか?といえば、object/embedを動的に出力しないとIEでswfがクリックされるまでアクティブにならないという問題を回避できない。
解決策としては、
1)AC_RunActiveContent.jsを改造し、objectにはidを、embedにはnameを出力するようにする。
2)AC_FL_RunContentの代わりにSWFObjectを使う。
SWFObjectはAC_RunContentより高機能だけれど、いちいちコードを書くのが面倒だしなぁ。。
AC_RunContentで足りてるっちゃ足りてるので、こちらを修正する方向で考えよう。
参考サイト
にゃあプロジェクト - ウェブログ - ExternalInterfaceを使ってみる (3)
Adobe - デベロッパーセンター : 外部APIを使用したFlashとJavaScriptの接続
第35回 FlashムービーとJavaScriptを連携させてみよう:ITpro