yoshiweb.NET-blog



HOME > blog > Flash > Flash / JavaScript Integration Kit の使い方
« Screenweaver サポート終了 | Flash OOP 勉強会 2005.07.07 »

Flash / JavaScript Integration Kit の使い方

Flash / JavaScript Integration Kit
JavaScript と Flash でデータとかやり取りとかできそうなヤツ。

Flash / JavaScript Integration Kit の使い方↓

HTML から swf 内の function を実行する方法
■ Flash 作業━━━━━━━━━━━━━━━━━━━━━━━━
1. Flash の中に HTML から実行する functon を作ります。

2. Flash の作業デレクトリ(Flaファイルと同じフォルダ)に
source > flash > actionscriptフォルダの中の「comフォルダ」を中身ごとコピーします。

3. fla ファイルに com フォルダの中のクラスファイルを読み込む ActionScript を追加します。
import com.macromedia.javascript.JavaScriptProxy;var proxy:JavaScriptProxy = new JavaScriptProxy(_root.lcId, this);


4.パブリッシュして swf を書き出します。
※2の com フォルダはサイト公開時には必要ありません。

■ HTML 作業━━━━━━━━━━━━━━━━━━━━━━━━
1. Web ディレクトリに「 installation フォルダ」の中の
「 JavaScriptFlashGateway.js 」と「 JavascriptFlashGateway.swf 」を追加します。

2. HTML に Javascript を追加します。
<script type="text/javascript" src="JavaScriptFlashGateway.jsへのパス"></script><script type="text/javascript"><!--var uid = new Date().getTime();var flashProxy = new FlashProxy(uid, 'JavaScriptFlashGateway.swfへのパス');//--></script>


3. SWF を表示する JavaScript を追加します。
<script type="text/javascript"><!--var tag = new FlashTag('コンテンツSWFファイルへのパス', 200, 150); // 最後の引数はWidthとHeightですtag.setFlashvars('lcId='+uid);tag.write(document);//--></script>


4. 以上で Javascript から Flash 内に作った function を実行できると思います。
<a href="javascript:flashProxy.call(' Flashの中で設定した関数 ', '引数');">実行</a>


3E4D - htmlからswf内のメソッドの呼び出し方
投稿者 yoshiweb - Flash - 2005/06/26 - 02:55:21 - Permalink
このエントリーをはてなブックマークに追加
タグ: /

Comments

下記URLのサンプルの「import com.macromedia.javascript.JavaScriptProxy;」で「 'com.macromedia.javascript.JavaScriptProxy' がロードされませんでした。」のエラーが出てしまいます。
Flash MX が Pro版 でないのが原因なのか?

・Using the Macromedia Flash / JavaScript Integration Kit
http://www.communitymx.com/...
投稿者 あじゃ - 2005/09/01 - 09:43:07
こんにちは、あじゃさん。
Windows 版の Flash MX 2004 は asファイルが BOM つきの UTF-8 で保存されてないとダメらしいです。
com フォルダの中の JavaScriptProxy.as と JavaScriptSerializer.as を BOM つきの UTF-8 で保存できるテキストエディタや SEPY などの ActionScript エディタで保存しなおしてはどうでしょう。

SEPY*
http://www.sephiroth.it/pyt...
日本語化ファイル
http://www.yk.rim.or.jp/~su...
BOM について
http://www.atmarkit.co.jp/a...
投稿者 yoshiweb - 2005/09/03 - 19:52:00
日本語は送れないのかな?変な数字になった...。
投稿者 yoshiweb - 2005/09/05 - 11:34:45
JS を改造すれば変な数字にならないようです。
http://www.ark-web.jp/blog/...
http://staff.ark-web.jp/~ta...
投稿者 yoshiweb - 2006/02/17 - 16:58:58
RSSリーダーのようなものを作成しようと思い、flashのXMLオブジェクトでrssファイルを読込み・解析した結果を、htmlに記述したjavaScriptの関数に引数として渡したのですが、この場合は上記の対策では日本語がうまく渡りませんでした。

以下、自分で試した結果です。

1. 読込むrss(xmlファイル)とhtmlのエンコードをUTF-8とし、文字列を渡す前に、Flash側でストリングをescape()で、URLエンコードしてやれば、Netscape 7とFirefoxではOK。IE 6、Operaでは文字化けする。

2. 読込むrss(xmlファイル)とhtmlのエンコードをUTF-8あるいはshift-JISとし、文字列を渡す前に、URLエンコードしないでそのままストリングを送った場合、IE 6のみOK。FirefoxとNetscapeではjavaScriptが呼ばれない。Operaでは文字化け。
javaScirptは苦手なので、できればActionScriptをメインに使って、Ajaxっぽいことをしたかったのですが・・・。どなたか、回避方法をご存知でしたら、ご教授お願いします。
投稿者 ゴン太 - 2006/02/23 - 22:25:56
初めまして。ほとんど情報がないのでここで質問させていただきます。
JavaScript Integration Kitを使って、
1:javascriptでflash呼び出し
2:flashからhtmlファイルを呼び出したものを、その後javascript(innerhtml)に変数としてわたし呼び出し→htmlに表示される
とajaxライクな事をしようと思っていますが、
呼び出すhtmlが大きいと(と言っても数十行)、javascript側で受信完了せずにinnerhtmlをしようとしてるのか表示されません(小さいとOK)。ajaxでは「readyState」ステータスで受信完了を監視していますが、このツールではどういう風にすればよいのでしょうか?どなたかご教授お願いいたします。
投稿者 niku - 2006/05/20 - 07:56:30
>初めまして。ほとんど情報がないのでここで・・・
すみません上記の書き込みは無視してください。(削除してもらってもかまいません)全く見当違いなことを書き込んでしまいました。誠に申し訳ございません
投稿者 niku - 2006/05/22 - 12:20:03
>ゴン太さん
返事が遅くなってしまいすみません。JavaScirptはあまり得意な方ではないのでわかりませんでした。引き続きわかる方がいましたらコメントよろしくお願いします。

>nikuさん
実はJavaScript Integration Kitをあまり使い込んでいないので詳しくないのですが getURL()でJavaScriptを実行するときに文字数が多いと実行されないのと同じ状況かな?と思っています。検証しないまま答えているので違うかもしれませんが...。
http://www.adobe.com/jp/sup...
Flash 8だったらExternalInterfaceクラスで実現できるかも。
投稿者 yoshiweb - 2006/05/24 - 18:47:25
>yoshiweb様
返信ありがとうございます。
「getURL()でJavaScriptを実行するときに文字数が多いと・・」そのとおりです。このことはマルチポスト(マナー違反でごめんなさい)で、制限があるようでした。
「ExternalInterfaceクラス」の情報ありがとうございました。試したところ、きちんと動いた・・・ような動かないような・・・(IE×でFireFox○)(;。;)IEで何で動かないんだろうと悩みまくっています。flashProxy.call(kitの関数)でflashの関数内のExternalInterface.call(javascript、・・)を呼び出しておりますが、上記の通りIE×FF○です。
解決いたしましたら情報としてまた書き込みさせていただきます。
(目指しているところは、getUrlやproxy.callの「カチャ」音なしでinnerHtml(大きめファイル)を実現させようとしています。)
投稿者 niku(食いたい」・・) - 2006/05/27 - 11:03:06
↑再び勘違い(;^_^A アセアセ…
「ExternalInterfaceクラス」で何とかなりそうです。
それと同時に「JavaScript Integration Kit 」の存在意義が謎に・・・
[ユーザーサイド]html(PHP)-javascript-flash(ExternalInterface)-php-[サーバサイド(Mysqlなど)]
とかなりシームレス?(シームって何?ォィw)にでき、色々応用できそうです♪重ね重ね情報のご教授ありがとうございました
投稿者 niku(食った・・うまうま) - 2006/05/27 - 22:42:06
とおもったら、今度はFireFoxで反応すらしない・・(;。;)←愚痴です
(ちなみにFlash付属のサンプルでも起動しませんでした~)
投稿者 niku(眠い(-_ゞゴシゴシ - 2006/05/27 - 23:16:28
はじめまして。Flash初心者です。

上記のFlash 作業では、HTMLから呼び出される関数は .fla ファイルに、以下のように記述すればよいのでしょうか?

function showMessage2(val){
t1 = val;
}
#変数t1は、ダイナミックテキストです。
投稿者 MAKKY - 2006/10/24 - 18:39:25
>MAKKYさん
返事が遅くなってすみません。MAKKYさんの書き方で大丈夫だと思います。
※私が書いたHTMLに一部、無駄なスペースが入っていたので削除しました。m(_ _)m
投稿者 yoshiweb - 2006/10/31 - 12:16:08
初めまして。質問があるのです。
お暇なときに答えてくださったら嬉しいです。

swfファイルをパブリッシュする際に以下の2つのエラーが出ます。
mac OSXのflash2004MXを使用していますが、それが関係しているのでしょうか?
JavaScriptProxy.as: 行 108:controller' という名前のプロパティはありません。
receiving_lc.controller = this;

JavaScriptProxy.as: 行 110:callFlash' という名前のプロパティはありません。
receiving_lc.callFlash = callFlash;
投稿者 YuKI - 2007/01/04 - 23:36:35
はじめまして、YuKIさん。
Flash / JavaScript Integration Kit は Flash MX 2004のころに開発されたものだったと思いますので、2004でも大丈夫なハズですが、いま試せる環境が手元にないのでちょっとわかりません。
引き続き、わかる方がいましたら & 解決したらYuKIさん、書き込みよろしくお願いします!!
投稿者 yoshiweb - 2007/01/05 - 16:32:49

コメントを書く

※ スパム対策のためコメント内の URL は全角で書いてください。あとで半角に変換します。