« 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 を追加します。
4.パブリッシュして swf を書き出します。
※2の com フォルダはサイト公開時には必要ありません。
■ HTML 作業━━━━━━━━━━━━━━━━━━━━━━━━
1. Web ディレクトリに「 installation フォルダ」の中の
「 JavaScriptFlashGateway.js 」と「 JavascriptFlashGateway.swf 」を追加します。
2. HTML に Javascript を追加します。
3. SWF を表示する JavaScript を追加します。
4. 以上で Javascript から Flash 内に作った function を実行できると思います。
3E4D - htmlからswf内のメソッドの呼び出し方
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内のメソッドの呼び出し方
Comments
Flash MX が Pro版 でないのが原因なのか?
・Using the Macromedia Flash / JavaScript Integration Kit
http://www.communitymx.com/...
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...
http://www.ark-web.jp/blog/...
http://staff.ark-web.jp/~ta...
以下、自分で試した結果です。
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っぽいことをしたかったのですが・・・。どなたか、回避方法をご存知でしたら、ご教授お願いします。
JavaScript Integration Kitを使って、
1:javascriptでflash呼び出し
2:flashからhtmlファイルを呼び出したものを、その後javascript(innerhtml)に変数としてわたし呼び出し→htmlに表示される
とajaxライクな事をしようと思っていますが、
呼び出すhtmlが大きいと(と言っても数十行)、javascript側で受信完了せずにinnerhtmlをしようとしてるのか表示されません(小さいとOK)。ajaxでは「readyState」ステータスで受信完了を監視していますが、このツールではどういう風にすればよいのでしょうか?どなたかご教授お願いいたします。
すみません上記の書き込みは無視してください。(削除してもらってもかまいません)全く見当違いなことを書き込んでしまいました。誠に申し訳ございません
返事が遅くなってしまいすみません。JavaScirptはあまり得意な方ではないのでわかりませんでした。引き続きわかる方がいましたらコメントよろしくお願いします。
>nikuさん
実はJavaScript Integration Kitをあまり使い込んでいないので詳しくないのですが getURL()でJavaScriptを実行するときに文字数が多いと実行されないのと同じ状況かな?と思っています。検証しないまま答えているので違うかもしれませんが...。
http://www.adobe.com/jp/sup...
Flash 8だったらExternalInterfaceクラスで実現できるかも。
返信ありがとうございます。
「getURL()でJavaScriptを実行するときに文字数が多いと・・」そのとおりです。このことはマルチポスト(マナー違反でごめんなさい)で、制限があるようでした。
「ExternalInterfaceクラス」の情報ありがとうございました。試したところ、きちんと動いた・・・ような動かないような・・・(IE×でFireFox○)(;。;)IEで何で動かないんだろうと悩みまくっています。flashProxy.call(kitの関数)でflashの関数内のExternalInterface.call(javascript、・・)を呼び出しておりますが、上記の通りIE×FF○です。
解決いたしましたら情報としてまた書き込みさせていただきます。
(目指しているところは、getUrlやproxy.callの「カチャ」音なしでinnerHtml(大きめファイル)を実現させようとしています。)
「ExternalInterfaceクラス」で何とかなりそうです。
それと同時に「JavaScript Integration Kit 」の存在意義が謎に・・・
[ユーザーサイド]html(PHP)-javascript-flash(ExternalInterface)-php-[サーバサイド(Mysqlなど)]
とかなりシームレス?(シームって何?ォィw)にでき、色々応用できそうです♪重ね重ね情報のご教授ありがとうございました
(ちなみにFlash付属のサンプルでも起動しませんでした~)
上記のFlash 作業では、HTMLから呼び出される関数は .fla ファイルに、以下のように記述すればよいのでしょうか?
function showMessage2(val){
t1 = val;
}
#変数t1は、ダイナミックテキストです。
返事が遅くなってすみません。MAKKYさんの書き方で大丈夫だと思います。
※私が書いたHTMLに一部、無駄なスペースが入っていたので削除しました。m(_ _)m
お暇なときに答えてくださったら嬉しいです。
swfファイルをパブリッシュする際に以下の2つのエラーが出ます。
mac OSXのflash2004MXを使用していますが、それが関係しているのでしょうか?
JavaScriptProxy.as: 行 108:controller' という名前のプロパティはありません。
receiving_lc.controller = this;
JavaScriptProxy.as: 行 110:callFlash' という名前のプロパティはありません。
receiving_lc.callFlash = callFlash;
Flash / JavaScript Integration Kit は Flash MX 2004のころに開発されたものだったと思いますので、2004でも大丈夫なハズですが、いま試せる環境が手元にないのでちょっとわかりません。
引き続き、わかる方がいましたら & 解決したらYuKIさん、書き込みよろしくお願いします!!
コメントを書く
※ スパム対策のためコメント内の URL は全角で書いてください。あとで半角に変換します。