容器只能呼叫函數中的 ActionScript 程式碼,而不能呼叫其它的 ActionScript 程式碼。如果要透過容器應用程式呼叫 ActionScript 函數,您必須執行兩項作業:使用 ExternalInterface 類別註冊函數,然後透過容器的程式碼呼叫它。
首先,您必須註冊 ActionScript 函數以表示它已經可以供容器進行呼叫。使用
ExternalInterface.addCallback()
方法,如下所示:
function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);
addCallback()
方法會採用兩個參數。第一個參數是類型為 String 的函數名稱,讓容器知道這個函數的名稱。第二個參數是實際的 ActionScript 函數,會在容器呼叫已定義的函數名稱時執行。因為這些名稱很容易分辨,即使實際的 ActionScript 函數具有不同的名稱,您也可以指定將由容器使用的函數名稱。這個功能在不知道函數名稱時 (例如指定匿名函數,或者要呼叫的函數是在執行階段才會決定) 特別有用。
在使用 ExternalInterface 類別註冊 ActionScript 函數後,容器實際上就可以呼叫這個函數。執行這項作業的方式依容器的類型而定。例如,在網頁瀏覽器的 JavaScript 程式碼中,會將註冊的函數名稱當做是 Flash Player 瀏覽器物件的方法來呼叫 ActionScript 函數 (也就是說,做為 JavaScript 物件的方法,用來表示
object
或
embed
標籤)。換句話說,就像呼叫本機函數一樣地傳遞參數及傳回結果。
<script language="JavaScript">
// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>
此外,在呼叫執行於桌面應用程式之 SWF 檔中的 ActionScript 函數時,註冊的函數名稱和任何參數也必須序列化成 XML 格式化字串。之後實際的呼叫作業是使用 XML 字串做為參數,由 ActiveX 控制項的
CallFunction()
方法執行呼叫。如需有關這類通訊所使用之 XML 格式的詳細資訊,請參閱
外部 API 的 XML 格式
。
不論是使用那一種方式,ActionScript 函數的傳回值都會回傳給容器程式碼。如果呼叫者是瀏覽器中的 JavaScript 程式碼,就會直接傳回值;如果呼叫者是 ActiveX 容器,則將值序列化成 XML 格式化字串。