Actionscript 3 部份:
ExternalInterface.addCallback("flashHello", flashHello);
public function flashHello():void{
trace("hello");
}
如果你是使用 Flash Builder 4,ExternalInterface 那行會報錯的,解決方法是將那行放到 function 中,待 Flash 完全載入完成再執行那個 function。
public function init():void {
ExternalInterface.addCallback("flashHello", flashHello);
}
在 s:Application 這個 tag 內加上 applicationComplete,這樣便會在完全載入完成時執行 init 這個 function。
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="init()">
現在到 Javascript 部份,首先 Javascript 要先取得到 Flash 物件,如果沒有使用 SWFObject 的先要加上要下 function。
function getFlashMovieObject(movieName){
if (window.document[movieName]){
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet")==-1){
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else{
return document.getElementById(movieName);
}
}
取得 Flash 物件:
var obj = getFlashMovieObject("flashId");
有使用 SWFObject 只需用以下方法便可取得 Flash 物件。
var obj = swfobject.getObjectById("flashId");
現在 Javascript 執行 Actionscript 3 的 function:
if(obj)
obj.flashHello();
要輸入變數也沒有問題:
Actionscript 3:
public function init():void {
ExternalInterface.addCallback("flashSomething", flashSomething);
}
public function flashSomething(message:String):void{
trace(message);
}
Javascript:
if(obj)
obj.flashSomething();
返回數值:
Actionscript:
public function init():void {
ExternalInterface.addCallback("flashSomething", flashSomething);
}
public function flashSomething(message:String):String{
trace(message);
return message + " from flash ";
}
Javascript:
if(obj)
alert(obj.flashSomething());
相關書籍: