コンテナが呼び出すことができるのは、関数内の ActionScript コードのみです。それ以外の ActionScript コードは、コンテナから呼び出すことはできません。コンテナアプリケーションから ActionScript 関数を呼び出すには、ExternalInterface クラスへの関数の登録と、コンテナコードからの関数の呼び出しという、2 つの処理が必要になります。
最初に、ActionScript 関数を登録し、コンテナから使用可能にすることを示す必要があります。
ExternalInterface.addCallback()
メソッドを次のように使用します。
function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);
addCallback()
メソッドには 2 つのパラメーターがあります。1 つはストリングの関数名で、コンテナはその名前で関数を認識します。 もう 1 つのパラメーターは実際の ActionScript 関数で、定義された関数名をコンテナが呼び出すと実行されます。 これらの名前は区別されるため、実際の ActionScript 関数が異なる名前であっても、コンテナで使用される関数名を指定できます。 これは、匿名関数が指定された場合や、呼び出される関数が実行時に決定される場合など、関数名が不明な場合に非常に便利です。
ActionScript 関数が ExternalInterface クラスに登録されると、コンテナが実際に関数を呼び出せるようになります。 その方法は、コンテナのタイプによって異なります。 例えば、Web ブラウザーの JavaScript コードの場合、登録された関数名をまるで Flash Player ブラウザーオブジェクトのメソッド(
object
または
embed
タグを表す JavaScript オブジェクトのメソッド)のように使用して ActionScript 関数が呼び出されます。つまり、パラメーターが渡され、呼び出されたローカル関数から結果が返されます。
<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 フォーマットストリングにする必要があります。 その後、ActiveX コントロールの
CallFunction()
メソッドとパラメーターとして XML ストリングを呼び出すことで、呼び出しが実際に実行されます。この通信で使用される XML フォーマットについて詳しくは、
External API の XML フォーマット
を参照してください。
いずれの場合も、ActionScript 関数の戻り値はコンテナコードに返されますが、呼び出し側がブラウザーの JavaScript コードの場合は値として直接返され、呼び出し側が ActiveX コンテナの場合は XML フォーマットストリングとして直列化して返されます。