| パッケージ | flash.external |
| public final class ExternalInterface | |
| 継承 | ExternalInterface Object |
HTML ページ上の JavaScript から、Flash Player の ActionScript 関数を呼び出すことができます。ActionScript 関数は値を返すことができ、JavaScript は、呼び出しの戻り値として即座にこの値を受け取ります。
この機能は以前の fscommand() メソッドに代わるものです。
ExternalInterface は、次のブラウザとオペレーティングシステムの組み合わせに対応しています。
| ブラウザ | オペレーティングシステム | |
|---|---|---|
| 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 を利用するには、ユーザーの Web ブラウザが、一部のブラウザによってプラグインスクリプトとして公開されている ActiveX または NPRuntime API のいずれかをサポートしている必要があります。http://www.mozilla.org/projects/plugins/npruntime.html を参照してください。
メモ : HTML ページに SWF ファイルを埋め込む場合、<object> タグと <embed> タグの id 属性と name 属性に次の文字が含まれていないことを確認します。(.)、-、+、*、/、および \。
ActionScript から、HTML ページに対して次のことを実行できます。
HTML ページの JavaScript から、次のことを実行できます。
メモ : Flash Player は現在、HTML フォームに埋め込まれた SWF ファイルをサポートしていません。
関連項目
| プロパティ | 定義 | ||
|---|---|---|---|
| available : Boolean
[static][read-only]
この Player が外部インターフェイスを備えたコンテナに含まれているかどうかを示します。
| ExternalInterface | ||
![]() | constructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
| Object | |
| objectID : String
[static][read-only]
Internet Explorer の
<object> タグの id 属性を返すか、または Netscape の <embed> タグの name 属性を返します。 | ExternalInterface | ||
![]() | prototype : Object
[static]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
| Object | |
| メソッド | 定義 | ||
|---|---|---|---|
| addCallback(functionName:String, closure:Function):void
[static]
ActionScript メソッドをコンテナから呼び出し可能なものとして登録します。
| ExternalInterface | ||
| call(functionName:String, ... arguments):*
[static]
Flash Player コンテナで公開されている関数を呼び出し、必要に応じて引数を渡します。
| ExternalInterface | ||
![]() | hasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
| Object | |
![]() | isPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
| Object | |
![]() | propertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
| Object | |
![]() | setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
| Object | |
![]() | toString():String
指定されたオブジェクトのストリング表現を返します。
| Object | |
![]() | valueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
| Object | |
| available | プロパティ |
available:Boolean [read-only]
この Player が外部インターフェイスを備えたコンテナに含まれているかどうかを示します。外部インターフェイスが利用できる場合、このプロパティは true になります。利用できない場合には false になります。
メモ : HTML で外部 API を使用する場合、JavaScript メソッドを呼び出す前には常に、HTML が完全にロードされていることを確認する必要があります。
実装 public static function get available():Boolean
関連項目
available プロパティを使用して、外部インターフェイスを備えたコンテナ内に Player が含まれているかどうかを決定します。
package {
import flash.text.TextField;
import flash.display.MovieClip;
import flash.external.ExternalInterface;
public class extint_test extends MovieClip {
public function extint_test() {
var isAvailable:Boolean = ExternalInterface.available;
var availTxt:TextField = new TextField();
availTxt.text = isAvailable.toString();
addChild(availTxt);
}
}
}
| objectID | プロパティ |
objectID:String [read-only]
Internet Explorer の <object> タグの id 属性を返すか、または Netscape の <embed> タグの name 属性を返します。
public static function get objectID():String
関連項目
| addCallback | () | メソッド |
public static function addCallback(functionName:String, closure:Function):void
ActionScript メソッドをコンテナから呼び出し可能なものとして登録します。addCallBack() の呼び出しが成功すると、Flash Player 内に登録されている関数をコンテナ内の JavaScript や ActiveX から呼び出すことができます。
functionName:String — コンテナが関数を呼び出すことができる名前です。
|
|
closure:Function — 呼び出す関数閉包です。これは独立した関数にすることも、オブジェクトインスタンスのメソッドを参照するメソッド閉包とすることもできます。メソッド閉包を渡すことで、特定のオブジェクトインスタンスのメソッドでコールバックを実際にダイレクトできます。
|
Error — コンテナが入呼をサポートしない場合、エラーがスローされます。これは Windows 用の Internet Explorer、Mozilla 1.7.5 以降、または Firefox 1.0 以降のような NPRuntime API を使用するブラウザでのみサポートされます。
|
|
SecurityError — 指定された名前を使用したコールバックが、アクセスしていない Sandbox 内で既に ActionScript によって追加されています。このコールバックを上書きできません。これは、最初に addCallback() メソッドを呼び出した ActionScript が Security.allowDomain() メソッドも呼び出すようにすることによって回避できる場合があります。
|
|
SecurityError — コンテナ環境がセキュリティサンドボックスに属しているために、呼び出し側のコードにアクセス権がありません。この問題を解決するために、次のことを実行します。
|
関連項目
| call | () | メソッド |
public static function call(functionName:String, ... arguments):*
Flash Player コンテナで公開されている関数を呼び出し、必要に応じて引数を渡します。指定された関数が利用できない場合は null を返します。それ以外の場合は、関数の戻り値を返します。再帰呼び出しはできません。再帰呼び出しの場合は null を返します。
コンテナが HTML ページである場合、このメソッドは <script> エレメントに囲まれた JavaScript 関数を呼び出します。
コンテナが何か他の ActiveX コンテナの場合、このメソッドは、指定された名前で FlashCall ActiveX イベントを発行し、そのイベントはコンテナによって処理されます。
コンテナが Netscape プラグインをホストしている場合、新しい NPRuntime インターフェイス用のカスタムサポートを記述するか、HTML コントロールを埋め込んだ後にそのコントロール内に Flash Player を埋め込むことができます。HTML コントロールを埋め込んだ場合、ネイティブコンテナアプリケーションとやり取りする JavaScript インターフェイスを通じて Flash Player と通信できます。
パラメータfunctionName:String — コンテナ内にある呼び出し先関数の名前です。
|
|
... arguments — コンテナ内の関数に渡される引数です。任意のパラメータを指定することができ、複数のパラメータを指定する場合はカンマで区切ります。パラメータには任意の ActionScript データ型を使用できます。呼び出し先が JavaScript 関数である場合、ActionScript のデータ型は JavaScript のデータ型に自動的に整列化されます。呼び出し先が他の ActiveX コンテナである場合、パラメータは要求メッセージの中にエンコードされます。
|
* — コンテナから受け取った応答です。呼び出しに失敗した場合は、null が返され、エラーがスローされます。失敗原因としては、コンテナに該当する関数が存在しない場合、インターフェイスが利用できない場合、再帰が発生した場合、セキュリティ上の問題がある場合などがあります。
|
Error — コンテナが発呼をサポートしない場合、エラーがスローされます。これは Windows 用の Internet Explorer、Mozilla 1.7.5 以降、または Firefox 1.0 以降のような NPRuntime API を使用するブラウザでのみサポートされます。
|
|
SecurityError — コンテナ環境がセキュリティサンドボックスに属しているために、呼び出し側のコードにアクセス権がありません。これを回避するには、コンテナの環境において、allowScriptAccess (通常、HTML の allowScriptAccess <object>/<embed> タグ) に適切な値を設定します。
|
関連項目
package {
import flash.display.Sprite;
import flash.events.*;
import flash.external.ExternalInterface;
import flash.text.TextField;
import flash.utils.Timer;
import flash.text.TextFieldType;
import flash.text.TextFieldAutoSize;
public class ExternalInterfaceExample extends Sprite {
private var input:TextField;
private var output:TextField;
private var sendBtn:Sprite;
public function ExternalInterfaceExample() {
input = new TextField();
input.type = TextFieldType.INPUT;
input.background = true;
input.border = true;
input.width = 350;
input.height = 18;
addChild(input);
sendBtn = new Sprite();
sendBtn.mouseEnabled = true;
sendBtn.x = input.width + 10;
sendBtn.graphics.beginFill(0xCCCCCC);
sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10);
sendBtn.graphics.endFill();
sendBtn.addEventListener(MouseEvent.CLICK, clickHandler);
addChild(sendBtn);
output = new TextField();
output.y = 25;
output.width = 450;
output.height = 325;
output.multiline = true;
output.wordWrap = true;
output.border = true;
output.text = "Initializing...\n";
addChild(output);
if (ExternalInterface.available) {
try {
output.appendText("Adding callback...\n");
ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);
if (checkJavaScriptReady()) {
output.appendText("JavaScript is ready.\n");
} else {
output.appendText("JavaScript is not ready, creating timer.\n");
var readyTimer:Timer = new Timer(100, 0);
readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
readyTimer.start();
}
} catch (error:SecurityError) {
output.appendText("A SecurityError occurred: " + error.message + "\n");
} catch (error:Error) {
output.appendText("An Error occurred: " + error.message + "\n");
}
} else {
output.appendText("External interface is not available for this container.");
}
}
private function receivedFromJavaScript(value:String):void {
output.appendText("JavaScript says: " + value + "\n");
}
private function checkJavaScriptReady():Boolean {
var isReady:Boolean = ExternalInterface.call("isReady");
return isReady;
}
private function timerHandler(event:TimerEvent):void {
output.appendText("Checking JavaScript status...\n");
var isReady:Boolean = checkJavaScriptReady();
if (isReady) {
output.appendText("JavaScript is ready.\n");
Timer(event.target).stop();
}
}
private function clickHandler(event:MouseEvent):void {
if (ExternalInterface.available) {
ExternalInterface.call("sendToJavaScript", input.text);
}
}
}
}
<!-- saved from url=(0014)about:internet -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ExternalInterfaceExample</title>
<script language="JavaScript">
var jsReady = false;
function isReady() {
return jsReady;
}
function pageInit() {
jsReady = true;
document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n";
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function sendToActionScript(value) {
thisMovie("ExternalInterfaceExample").sendToActionScript(value);
}
function sendToJavaScript(value) {
document.forms["form1"].output.value += "ActionScript says:" + value + "\n";
}
</script>
</head>
<body onload="pageInit();">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="ExternalInterfaceExample" width="500" height="375"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="ExternalInterfaceExample.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
width="500" height="375" name="ExternalInterfaceExample" align="middle"
play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>
<form name="form1" onsubmit="return false;">
<input type="text" name="input" value="" />
<input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />
<textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>
</form>
</body>
</html>