外部 API は ActionScript の一部で、Flash Player のコンテナとして機能する「外部アプリケーション」(一般的には Web ブラウザまたはスタンドアローンのプロジェクタアプリケーション)で実行されるコードと、ActionScript との間の通信用メカニズムを提供します。ActionScript 3.0 では、外部 API の機能が ExternalInterface クラスによって提供されます。Flash Player 8 よりも前のバージョンの Flash Player では、fscommand() アクションを使用してコンテナアプリケーション内での通信が実行されていました。ExternalInterface クラスは fscommand() に代わるもので、JavaScript と ActionScript との間のすべての通信用に推奨されます。
注意:以前の fscommand() 関数を使用する必要がある場合(例えば、以前のバージョンのアプリケーションとの互換性を維持する場合、サードパーティの SWF コンテナアプリケーションやスタンドアローンの Flash Player で操作する場合など)は、パッケージレベルの関数として flash.system パッケージに用意されています。
ExternalInterface クラスは、ActionScript と Flash Player から、HTML ページ内の JavaScript や Flash Player のインスタンスを含むデスクトップアプリケーションへの通信を可能にするサブシステムです。
ExternalInterface クラスは次の条件でのみ使用できます。
- Windows 版 Internet Explorer の全サポートバージョン(5.0 以降)。
- Flash Player ActiveX コントロールのインスタンスを使用するデスクトップアプリケーションなどのコンテナアプリケーション。
- NPRuntime インターフェイスをサポートするすべてのブラウザ。現時点では次のブラウザが該当します。
- Firefox 1.0 以降
- Mozilla 1.7.5 以降
- Netscape 8.0 以降
- Safari 1.3 以降
その他の環境(スタンドアローンの Player で実行する場合など)では、ExternalInterface.available プロパティは false を返します。
ActionScript から、HTML ページの JavaScript 関数を呼び出すことができます。外部 API の機能は、次の点において fscommand() よりも強力です。
- fscommand() 関数から使用できる機能だけでなく、すべての JavaScript 関数を使用できます。
- 1 つのコマンドと 1 つのストリングパラメータという制限はなく、任意の個数のパラメータを任意の名前で渡すことができます。これにより、外部 API は fscommand() よりも非常に柔軟になっています。
- String パラメータだけでなく、様々なデータ型 (Boolean、Number、String など) を渡すことができます。
- 呼び出し結果の値を受け取ることができます。結果は呼び出しに対する戻り値として、直ちに ActionScript に戻されます。
重要: また、Flash Player インスタンスを定義する HTML タグ(object および embed タグ)が HTML form タグ内でネストされていると、ActionScript からの ExternalInterface 呼び出しが機能しません。
重要: HTML ページの Flash Player インスタンス(object タグの id 属性)に付けられた名前に、ハイフン(-)または JavaScript で演算子として定義されたその他の文字(+、*、/、\、. など)が含まれていると、コンテナ Web ページを Internet Explorer で表示した場合に、ActionScript からの ExternalInterface 呼び出しが機能しません。