« 画期的なGoogle Baseの使い方 ~アマゾンの書籍を全部登録する~ | main | AjaxもFlashもトラックできる!? Google Analyticsの脅威 »

2005年11月17日

FlashからJavaScriptを制御するフレームワーク

とかを、そろそろ作っておくと、2~3年ぐらいは重宝しそうな気がする。
AFLAXとか、ARAXとか出てきたし。

Flash8のExternalInterfaceを用いて、Flashが使うするJSコードを、外部JSにするかわりに、Flash内のクラスに埋め込めるようにすると、JS側を意識しないでJSの機能を使うことができるんじゃないかと。

とりあえず、たたき台だけ提示してみると

Flash側はこんな感じでJavaScriptのコードを内包してる。

import flash.external.ExternalInterface;

//JSで実行したいコード
var code = "alert('function from flash')"
ExternalInterface.call("jsFunction",code);


で、JavaScript側はこんな感じで関数を1つ作るだけ。

function jsFunction(code){
 var func = new Function(code);
 return func();
}

JavaScriptでは、new Function(ストリング); という記述で、ストリングの内容を実行する関数が作れることを利用して,Flash側からコードをストリングとして渡してやって実行するわけです。こうすると、Flash側でJSを超楽チンに制御。サンプルだとアラートが出るはずです。

まぁ、あくまでこれは叩き台で、実用レベルにもっていくには、毎回コードをJSに送るのは処理速度的に難があるので、あらかじめJS側に関数をレジスターする機能であるとか、一度送ったコードはJS側にキャッシュされるとか、そういう機能が必要となってくるわけです。あと引数のサポートとか。

こういうのは、個人で独占しても金にもならんし競争力のアドバンテージにならないわりに、一度作るとみんなで長期的に幸せに使えるので、なんかまったりと作れるといいなぁと思うのだけど、知恵を貸してください。

SourceForgeとか敷居が高くて嫌いなので、ブログとかwikiとか2chとかで使ってまったりやれたら楽しそうなんすけどね。

投稿者 Taka : 2005年11月17日 00:29

book

dotfla.gif

bookmark

はてなブックマークに追加

del.icio.usに追加

trackbacks

this entry's trackback URL:
http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/375

このリストは、次のエントリーを参照しています: FlashからJavaScriptを制御するフレームワーク:

» IRS from IRS
IRS [read more]

トラックバック時刻: 2006年01月15日 05:56

» Lasik from Lasik
Lasik [read more]

トラックバック時刻: 2006年01月16日 18:12

» Memory Foam Mattress from Memory Foam Mattress
Memory Foam Mattress [read more]

トラックバック時刻: 2006年02月20日 12:09

» caribbean vacation from caribbean vacation
caribben vacation [read more]

トラックバック時刻: 2006年02月24日 02:31

» Color Contacts from Color Contacts
Color Contacts [read more]

トラックバック時刻: 2006年02月27日 22:25

» Real Estate Investing from Real Estate Investing
Real Estate Investing [read more]

トラックバック時刻: 2006年02月28日 02:48

» http://smallbusinessaccountingsoftware-EmkJ.blogspot.com from http://smallbusinessaccountingsoftware-EmkJ.blogspot.com
http://discountcarrental-uMoB.blogspot.com [read more]

トラックバック時刻: 2006年03月04日 16:21

» VW Auto Parts from VW Auto Parts
VW Auto Parts [read more]

トラックバック時刻: 2006年03月23日 10:28

comment

責任範囲がFlash側に依存されるのはデバッグ、メンテ、切り分け的にどうなのかなぁと思うんですが、具体的に何をしたいのかがカギでしょうか。

以前もちょっとしたJavaScriptコールであれば、FsCommand書くの面倒だからって、getUrl("javascript: "alert('function from flash')")とかはやってました。("のエスケープ省略)

ここに、あまりロジックを記述するのはよろしくないので、スタブメソッドを呼ぶだけってのが、責任範囲的によいですね。

Flash8をまだ見てないのでアレなんですが、JavaScript間でオブジェクトは渡せないんでしょうか。最近、今更、自作ActiveXとJavaScript間はオブジェクト参照が渡せることに気がついて、かなり楽になったんですが。オブジェクトが相互に渡せるなら、その辺を隠蔽するのもアリですかね。
(もしできないなら、一旦、シリアライズして、受け取った側で復活させるのをフレームワーク化するのが良いですね。)

by f-shin : 2005年11月17日 08:26

実際にどういう場面で必要かちゅーのはあるですが、そういう開発スタイルならosflash.orgとかでやっちゃうて手もあるですな。

>f-shin
シリアライズなら、JSONがちょうどいいんではないかと思う次第。
http://www.crockford.com/JSON/index.html

by hiko : 2005年11月17日 10:27

こんにちは。
ExternalInterface.callでオブジェクト渡せますよ。シリアライズしなくて済みそうです。
MC渡したらどうなるのかなと思って試したらJavaScript側関数呼ばれなくなりました。

by key : 2005年11月17日 11:56

>f-sinさん
責任の切り分けは色々考えてみたのですが、個人的にはJSを使用するクラスを色々作る場合、それぞれのasクラスに対応する外部jsファイルを作るのは、メンテ的に面倒なのではないかと思いました。

jsはパッケージとかnamespaceとかを作るのも面倒なので、大量のクラスを使うと衝突しそうですし。

で、数行~30行程度の小さめのロジックならばAS内部にハードコードしたほうが、メリットが大きいのではないかなぁと。

とりあえず、まだ印象だけで検証してないのですがそんな風に思ってます。

>hikoさん
実は自分もあまり時間がとれそうにないので、やるなら超まったりで行きたい感じなので、osflash.orgとかはちょっとキツそうっす。


>keyさん
フォローサンクスです。

by Taka : 2005年11月17日 13:05

具体的にどういう方向のapiをお考えなのか教えていただけると、もうちょっと踏み込めるかもしれませんね。

明らかにFlash主体で、ブラウザコントロールなどのスクリプトが完結してる処理なんでしょうかね。やはり。
それこそalertとか、ブックマークへ登録とか、Flash Player7までならIMEのon/offの技ってのもあったかも。

必要ならDOMをコントロールして、最上位レイヤーを追加してしまうapiとかもありですかね。googleマップやAmazon呼び出しがどうのこうのとか。

ちょうど今、自前ActiveXが、二回イベント発行してるせいで、HTML側で2重submitになって、サーバ側の多重更新エラーに遭遇して、これ、ActiveXの中知らない奴には、何が起きてるのかもわからんだろうなぁと思って、ふとレスしてみました。

by f-shin : 2005年11月18日 11:06

連続すいません。質問の答えにアドバイスいただいた方へのお礼書くのをわすれてしまいました。

>hikoさん
JSONって、いろんな言語向けの実装があったんですね。知りませんでした。

>keyさん
オブジェクトいけますか。サーバ側と一気通貫できそうなJSONと使い分けって感じですね。


by f-shin : 2005年11月18日 11:15

circle will tournament unconditionally: http://www.walmartmovie.com/ , memorizing is feature of industrious corner

by Alexander Johnson : 2006年03月29日 02:12

コメントしてください




保存しますか?