Flash8から、標準でJavaScriptとswfが通信するための機能が付いている。
ExternalInterfaceである。
これを使えば、JavaScript中から、swf中のActionScriptの関数をコールしたり、逆に、ActionScriptから、JavaScriptの関数をコールすることができる。
使い方については、ドキュメントがそこそこあるのでここには詳しく書かないけれど、、これが、なぜか変な挙動で、ものすごくハマる。
現象としては、swf中で設定したJavaScript用のコールバック関数が、Firefoxに限って、JavaScriptからコールできないのである。
ネット上で調べた限り、Safari,Firefoxでは動くが、IEでは動かないという症状はたくさんあるが、Firefoxでは動かないというものがない。
IEやSafariでは動いているので、ActionScriptや、JavaScriptには問題ないと思われる。firebugでトレースしてみるも、やはりswfオブジェクトにコールバック関数が登録されてないような挙動である。うーん。分からない。
キャッシュの線かと思ったが、cacheをdisableにしてもダメ。
ActionScript中からのcallback処理は、trueが返ってきてるので、関数の登録は正常に行われてるはず。実際、IEやsafariからはコールできてるし。
なぜ、firefoxだけダメなんだろう。
firefoxに潜在的なバグがあるのか、、、と思いきや、ExternalInterfaceのチュートリアルを掲載してるサイトをfirefoxでアクセスすると、正常に動いている。
うーん。くやしい。どうして3行たらずのコードが動かないのか。
例えば、にゃあプロジェクト - ウェブログ - ExternalInterfaceを使ってみる (3)
は、こちらのfirefoxでアクセスしてもちゃんと動く。
firebugのコンソールで、
と入力すると、ちゃんと
と返ってくる。
しかし、こちらで作ったものだと、
と、なるのである。
しかし、IEやsafariではちゃんと動く。謎だ。謎すぎる。なにが違うのか。
まったく分からない。だれかたすけて〜〜!