Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > External API の使用 > ExternalInterface クラスの使用 > コンテナからの ActionScript コードの呼び出し | |||
コンテナが呼び出すことができるのは、関数内の 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 フォーマットストリングとして直列化して返されます。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000343.html