FlashとJavaScriptの連携。

たまには技術ネタでも。
FlashとJavaScriptの連携とかいうはなしです。
要するに、FlashからJavaScriptのfunction呼んだり、その逆をしたりできるよ、っていう。
そんな需要どこにあるのかよくわからないですが、AS3.0に標準で用意されてんだなこれが。2.0は使わないからシラネ。

ググればおちおち回答書いてあるけどなんかどれも分かりにくかったから自分なりにまとめ直してみるんだよー。

キーワードはExtrnalInterface.

ではさっそく。

の前に注意事項!

ローカルでテストする時、埋め込んだswfのパラメーターで、
allowScriptAccessをalwaysにしておかないとダメです。
あとFlashのグローバル設定で許可しないとダメです。
MacOSX使ってるならWeb共有有効にすればいいんじゃない?
Windows?シラネ。IISとか使えば?
Linux?apache入れれば?

switch(方向){
case “FlashでJavaScriptを操作”:
こっちの方が簡単。
AS側にJSを呼びたいタイミングで

ExternalInterface.call("呼びたいJSのfanction名","渡したい引数(複数渡す場合はカンマ区切りで可変長)"

あとは埋め込むHTMLなり、.jsファイルにJSのfunction書くだけ。
デバッグの時なんかに、

ExternalInterface.call("alert","ほむほむ!");

って書くと、ほむほむ!って出ますまじで。
break;

case “JavaScriptでFlashを操作”:
こっち厄介。
まずJS側でASのfunction呼ぶfunction準備して、AS側で受け取り準備して、そしてASのfunctionの定義しないといけない。

HTMLにFlash埋め込む時にパブリッシュしたコード使うかswfobject使うかで変わるんだけど、
Flashのパスを手に入れるfunctionをまずJSに定義して、ASとJSを繋ぐはしごの名前を叫ぶfunction用意して、ほむほむ!ってかんじで呼びます。

パブリッシュしたコードなら
JSに

function swfTarget(str) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[str];
} else {
return document[str];
}
}
function homuhomu(){
swfTarget("Flashの名前").ハシゴの名前("渡したい引数(複数渡す場合はカンマ区切りで可変長)");
}

で、あとはonClickなりでhomuhomuさんよんであげるとできます。ほむほむ!

swfobjectなら
HTMLにswfを埋め込む時に、callback先にcallbackSwfを指定して、
JSに

var swfObj = null;
function callbackSwf(obj){
swfObj = obj.ref;
}
function homuhomu(){
swfObj. ハシゴの名前("渡したい引数(複数渡す場合はカンマ区切りで可変長)");
}

で、あとはonClickなりでhomuhomuさんよんであげるとできます。ほむほむ!

//swfobject使う方がコードすっきりするしいいよ。うん。
//JS無効だと云々って話しもあるけど、JS無効だったらそもそもこの記事の話し全く無効だからね。

AS側は、

ExternalInterface.addCallback("ハシゴの名前","呼び出すASのfunction名");

でJSとのハシゴを作って、あとはfunctionの定義をします。
これは普通のfunctionの定義と同じ感じで書けば大丈夫。
break;
}

改めて自分でまとめてみたけど、やっぱりわかりづらいですね。
たぶん一回理解してしまえば使えるようになります。

まぁ、正直需要が(ry、大事なことなので改めて書きました。

次はxml de youtubeの話でも書く?書かない?

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください