Flash制作講座フラッシュ制作講習

FLASH制作からActionScriptによるFlashコンテンツ制作のためのフラッシュ制作講座

AS3.0クラスExternalInterface

AS3.0クラスExternalInterface

ExternalInterfaceクラスは外部 APIで、ActionScriptとFlash Playerコンテナ間の直接通信が可能なアプリケーションプログラミングインターフェイス。


コンテナの通信例として、JavaScriptを含むHTMLページや、Flash Playerが埋め込まれたデスクトップアプリケーションなど。



簡単に言うと、ActionScript記述でHTML上のJavaScript、FlashPlayerコンテナの連携が可能であるということですね。

HTMLソース上のJavaScriptの関数をコールすることも可能で、ブール (Boolean)、数値 (Number)、ストリング (String) などのさまざまなデータ型を返すこともできます。


ちなみにJavaScriptActionScript通信はすべてExternalInterface使用がAdobe社では推奨されています。



ExternalInterfaceクラスはfscommand()メソッドに変わる関数と位置づけされます。




【ExternalInterfaceの対応ブラウザとOS】
Internet Explorer 5.0 以降 Windows
Netscape 8.0 以降 Windows Macintosh
Mozilla 1.7.5 以降 Windows Macintosh
Firefox 1.0 以降 Windows Macintosh
Safari 1.3 以降 Macintosh

ExternalInterface動作条件はUAのWebブラウザが、ActiveXもしくはNPRuntime APIのどちらかのサポートが必要。


【パブリックプロパティ】

■available : Boolean[静的] [読み取り専用]
Playerが外部インターフェイスを備えたコンテナに含まれているかどうかを返す。

■marshallExceptions : Boolean = false[静的]
外部インターフェイスで、ActionScript例外を現在のブラウザに、JavaScript例外をFlash Playerに渡す必要があるかどうかを返す。

■objectID : String[静的] [読み取り専用]
Internet Explorerである場合はobjectタグのid 属性値を、Netscapeである場合はembedタグのname属性値を返す。

【パブリックメソッド】

■addCallback(functionName:String, closure:Function):void[静的]
ActionScriptメソッドをコンテナから呼び出し可能し、HTML上のJavaScriptからもActionScriptをコール可能にします。

■call(functionName:String, ... arguments):*[静的]
Flash Playerコンテナで公開されている関数を呼び出し、引数を渡すことが必要に応じて可能になります。



【例】
ExternalInterface.availableは外部インターフェイスを備えたコンテナ内に Player が含まれているかどうかを判定します。

import flash.external.*;

var AvailableValue:Boolean = ExternalInterface.available;
trace(AvailableValue);



ActionScript記述でHTMLページに対して実行可能なこと

・任意であるJavaScript関数の呼び出し
・引数の数を名前と共に引渡し
・ブール (Boolean)、数値 (Number)、ストリング (String) などのデータ型を渡すことが可能
JavaScript関数から戻り値の受け取りが可能


●HTMLページ上のJavaScriptより実行可能なこと

ActionScript関数の呼び出し
・標準である関数の呼び出し表記法を用いて引数を渡すことが可能
JavaScript関数に値を戻すことが可能



●注意するべきこと
HTMLページ上にSWFファイルを配置する際に、 タグおよび タグの id 属性と name 属性に以下の文字が含まれていない必要があります。

(.)、-、+、*、/、および \。


また、現在Flash Playerは、HTMLォームに埋め込まれたSWFファイルの動作保障をしていないようです。