2008年5月13日
JavaScriptからFlashの関数を呼ぶ:getURLでなくExternalInterfaceを使用する利点
カテゴリー: RIA (システム開発)
SEの竹村です。
弊社のGoogle Analyticsを確認すると、下記の記事が結構見られているようです。
▼JavaScriptからFlashの関数を呼ぶ - Flash Java Script Integration Kit
http://www.ark-web.jp/blog/archives/2006/02/javascriptflash_1.html
上記のブログでは、JavaScriptとFlashを連携させるために「osflash: Flash JavaScript Integration Kit」を使用していました。ですが、この記事は2006年と古くなっており、現在私が実際に利用しているライブラリとは異なるため、新たに記事を書くことにしました。
さて、現在ではJavaScriptとFlashを連携させるために利用するツールとして「ExternalInterfaceクラス」を利用します。このクラスは Flashバージョン8以上 が必須となりますが、利用方法がFlash Java Script Integration Kitと同じくらい簡単なため、可能な限りこちらを使うことをお薦めします。
また、ExternalInterfaceでJavaScriptとアクセスする利点を今回案件を通じて見つけたので、そのご紹介をしつつ、使い方を簡単に説明します。
まずは、FlashからJavaScriptの関数を呼び出すのに、Flashの古くから利用できる getURL() という関数を使用します。
例えば、下記のように使用して実行します。下記のgetURLのサンプルはこちら。
■index.htmlの記述抜粋
<script type="text/javascript">
function hello() {
alert('hello from flash');
}
</script>
■ActionScriptの記述抜粋
getURL("javascript:void(hello());");
上記の場合は、引数無しでJavaScriptを呼び出していますが、これが引数ありで呼び出す場合、Object型を渡すのは getURL() を利用する場合に工夫が必要です。
なぜなら、まずは普通にActionScriptで組んだサンプルをご覧ください。
■index.htmlの記述抜粋
<script type="text/javascript">
function receive_from_flash(oObject) {
var sText = '';
for (var i in oObject) {
sText += i +":"+ oObject[i] +"\n";
}
alert(sText);
}
</script>
■ActionScriptの記述抜粋
var oObject:Object = {test1:'foo', test2:'bar'};
getURL("javascript:void(receive_from_flash("+ oObject +"));");
期待するalertは以下のように表示されることでした。
test1:foo
test2:bar
ですが、実際に走らせてみるとエラーが出ます。
エラー内容はFirebugsで見ると下記のように表示されます。
(×) missing ] after element list
void(receive_from_flash([object Object]));
これは、getURLで式が評価されるときに oObject が下記のように [object Object] となったためです。
getURL("javascript:void(receive_from_flash([object Object]));");では、どうすればよいかというと、oObjectを展開して渡せばよいのです。つまりこうです。
getURL("javascript:void(receive_from_flash({test1:'foo',test2:'bar'}));");ただ、これは渡すObjectが大きい時は結構面倒ですね。ObjectにObjectが入れ子していて、さらにArrayが入ってきて…となると展開するのは面倒です。
この煩雑さからも、ExternalInterfaceの場合は解放されます。
先ほどのFlashからJavaScriptへ値を渡すコードのExternalInterfaceを使用して組んだサンプルをご覧ください。
■index.htmlの記述抜粋
<script type="text/javascript">
function receive_from_flash(oObject) {
var sText = '';
for (var i in oObject) {
sText += i +":"+ oObject[i] +"\n";
}
alert(sText);
}
</script>
■ActionScriptの記述抜粋
import flash.external.*;
var oObject:Object = {test1:'foo', test2:'bar'};
ExternalInterface.call("receive_from_flash", oObject);
結果のalertは、ちゃんと期待した通りに表示されました。

このように実装しやすい点も含めて、JavaScriptとFlashの連携には ExternalInterface を利用するとよいでしょう。詳しい使い方や、仕様については下記を参考にされるとよいと思います。
参考資料:
第35回 FlashムービーとJavaScriptを連携させてみよう
http://itpro.nikkeibp.co.jp/article/COLUMN/20070118/259015/
外部APIを使用したFlashとJavaScriptの接続
http://www.adobe.com/jp/devnet/flash/articles/external_interface.html
上記のFlash Paper版
http://www.himco.jp/articles/pdf/external_interface.swf
投稿者 竹村 : 2008年5月13日 10:50
|
|
|
タグ: JavaScript , Flash , Integration , Kit , osflash , ExternalInterface , getURL , ExternalInterface.call
この記事は参考になりましたか?
興味があるかも?
- Zen Cartで高機能・セキュアなECサイトを構築しませんか?
- Movable Type/MTOSを企業CMSとして活用しませんか?
- Ajaxで軽快なRIA(リッチ・インターネットアプリケーション)を
- Ajaxのアクセシビリティ向上:jCarouselLite auto controllerを利用した自動スクロールのアクセシビリティ対応
- つくるぶガイドブログ:『Flickrとのマッシュアップ』記事のまとめと振り返り
- JavaScript:画像拡大表示ライブラリ「PopBox」、HTMLのテーブルより高度なGrid表示ができる「dhtmlxGrid」のデモ
- 「つくるぶ特集 Flash|Ajax ベストサイトセレクション20」:スライダー(Slider)ライブラリと、写真の中に写真レイヤーを表示するテクニック
- 「つくるぶ特集 Flash|Ajax ベストサイトセレクション20」:郵便番号から住所ライブラリと、クライアント側での描画のテクニック
« 前の記事:Miqqle(ミックル)で社会・環境貢献:6団体に寄付しました
» 次の記事: アークウェブお手伝い事例:メッセンジャーバッグブランド「Timbuk2(ティンバックツー)」様のショッピングサイトがオープン
トラックバック
このエントリーのトラックバックURL:
http://www.ark-web.jp/blog/mt-tb.cgi/422
【!】本記事への言及がない記事からのトラックバックは、削除する場合があります。
アークウェブの本
Zen Cartによるオンラインショップ構築・運用テクニック―オープンソース徹底活用
内容充実のZen Cart公式本(v1.3対応)がついに発表です。アークウェブのスタッフをはじめZen-Cart.JPの中心メンバーが共著で執筆しました。続きを読む
人気記事
ランキング
新着はてブ
カテゴリー
- A-Form, MTプラグイン
- Ajax (システム開発)
- CMS(コンテンツマネジメント・システム)
- CSR(企業の社会的責任)
- Miqqle
- OpenSocial (システム開発)
- PukiWiki
- RIA (システム開発)
- Ruby on Rails(システム開発)
- SEM・サーチエンジン広告
- SEO・サーチエンジン最適化
- Snippy(SNS・ソーシャルブックマーク)
- Web 2.0
- WebSig24/7
- Webアクセシビリティ
- Webデザイン
- Webマーケティング
- Webユーザビリティ
- Web・ITニュースクリップ
- XP・アジャイル(システム開発)
- Zen Cart(オンラインショップ構築)
- ecoったー
- mixiアプリ
- necoったー
- だれもが使えるウェブコンクール
- アークウェブ
- アークウェブのCSR
- オープンソース
- セキュリティ(システム開発)
- テスト(システム開発)
- データベース
- ビジネスブログ・MovableType
- ビッグイシュー(The Big Issue)
- マッシュアップ
- 唐松(アクセス解析)










(準備中)




