ActionScriptとJavaScriptの連携(ExternalInterface)
ActionScriptからJavaScriptを呼んだり、またはその逆をやりたいときはExternalInterfaceを使えばいいんだけど、今までやったことなくて、少しハマったのでメモしておく。
ActionScriptからJavaScriptの関数を呼ぶ。
ExternalInterface.callを使う。
Security.allowDomain(ExternalInterface.call("function() { return location.hostname }")); // javascriptのalertを呼ぶ。 ExternalInterface.call("alert('hello')");
JavaScriptからActionScriptの関数を呼ぶ。
ExternalInterface.addCallbackで、JavaScriptから呼び出したい関数を登録しておく。
JavaScript側で、埋め込まれたSWFObjectを取得して、その取得したオブジェクトに対して、addCallbackで登録しておいたメソッドを呼び出す。
// ActionScript側 // 第1引数が、JavaScript側で呼び出すときの関数名になる。 // 第2引数が、登録する関数。 第1引数と第2引数の関数名は同じでなくてもよい。 ExternalInterface.addCallback("doSomething", doSomething); public function doSomething():void { // 何かする。 }
// JavaScript側。swfobject.jsを使って埋め込んだとする。 var flashvars = {}; var params = { menu: "false", scale: "noScale", allowFullscreen: "true", allowScriptAccess: "always", bgcolor: "#FFFFFF" }; var attributes = { id:"AppTest", name:"AppTest" }; swfobject.embedSWF("AppTest.swf", "altContent", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes); // この関数を呼べば、上で登録したActionScriptの関数が呼べる。 function callActionScript() { var swf = document.getElementById("AppTest"); // attributesのidを指定する。 swf.doSomething(); }