Flashからそのページが表示されているブラウザの画面上の位置を取得したい、というお題が与えられまして(仕事でですが)、これは JavaScript を利用しないことには無理だろうということで、タイトルにある通り「Flash と JavaScript の連携」に取り組んだわけです。
ブラウザの画面上の位置情報を取得するには、JavaScript の「window.screenTop」と「window.screenLeft」を使えばよいということは調べがつきました。
そして、Flash と JavaScript の連携については、ActionScript の「ExternalInterface クラス」を使えばいけることがわかりました。
で、さっそく下記ページのサンプルを参考に作ってみたのです。
「ITPro : Flash8 入門講座 第35回 FlashムービーとJavaScriptを連携させてみよう」
現在、仕事の作業環境が Mac なので、まずは Safari でテスト。
これは大成功でした。
続いて、Firefox は、「window.screenTop」「window.screenLeft」に対応していないためダメ、失敗。
さらに、Windows に移ってIE7ではというと、JavaScript は動いているのに Flash との連携がうまく行きません。
まず、ActionScript3.0 形式で書き出すと、JavaScript の「構文エラー」が発生してダメです。
ActionScript2.0 形式でパブリッシュし直してみると、構文エラーは消えますが、JavaScript からの戻り値が「Null」になってしまいます。
サンプルはちゃんと動いているのに、なぜ!?
昨日一日悩み、今朝、原因がようやく分かりました。
「AC_RunActiveContent.js」
こいつです。
ご存知の通り、IEではJavaScript を介して表示しないと、Flashコンテンツをアクティブにするのにワンクリック必要です。
で、Adobeから提供されているスクリプトが「AC_RunActiveContent.js」で、Dreamweaver やFlashといったアプリケーションを使えば、アプリが自動的に表示用のスクリプトを書き出してくれます。
問題はそこで、僕はFlashでパブリッシュしたSWFファイルを、Dreamweaver で配置していました。
でも、Dreamweaverが書き出すスクリプトと、Flash が書き出すスクリプト、さらに言えば、Flex が書き出すスクリプトはみんな異なるんですね。
Dreamweaver は必要最小限のプロパティしか書き出してくれないみたいです。
ま、Flash でやってる処理の内容なんて、Dreamwaverにはわからないので仕方ないのかもしれませんが。
結論。
Flash の埋め込みには Flash からパブリッシュされたHTMLを使うのが無難。
ということですか。











