| 패키지 | flash.external |
| 클래스 | public final class ExternalInterface |
| 상속 | ExternalInterface Object |
| 언어 버전 : | ActionScript 3.0 |
| Player 버전 : | Flash Player 9 |
HTML 페이지의 JavaScript를 사용하여 Flash Player에서 ActionScript 함수를 호출할 수 있습니다. ActionScript 함수는 값을 반환할 수 있고 JavaScript는 이 호출의 반환값을 즉시 수신합니다.
이 기능은 fscommand() 메서드를 대체합니다.
다음과 같은 브라우저와 운영 체제에서 ExternalInterface 클래스를 사용합니다.
| 브라우저 | 운영 체제 | 운영 체제 |
|---|---|---|
| Internet Explorer 5.0 이상 | Windows | |
| Netscape 8.0 이상 | Windows | MacOS |
| Mozilla 1.7.5 이상 | Windows | MacOS |
| Firefox 1.0 이상 | Windows | MacOS |
| Safari 1.3 이상 | MacOS |
Linux용 Flash Player 버전 9.0.31.0 이상은 다음 브라우저에서 ExternalInterface 클래스를 지원합니다.
| 브라우저 |
|---|
| Mozilla 1.7.x 이상 |
| Firefox 1.5.0.7 이상 |
| SeaMonkey 1.0.5 이상 |
ExternalInterface 클래스를 사용하려면 사용자 웹 브라우저가 ActiveX 또는 일부 플러그인 스크립팅용 브라우저에서 노출되는 NPRuntime API를 지원해야 합니다. 브라우저와 운영 체제 시스템 조합이 위의 목록에 표시되지 않더라도 이들이 NPRuntime API를 지원한다면 ExternalInterface 클래스를 지원해야 합니다. 자세한 내용은 http://www.mozilla.org/projects/plugins/npruntime.html을 참조하십시오.
참고: SWF 파일을 HTML 페이지에 포함할 때 object 태그와 embed 태그의 id 및 name 특성에는 다음 문자가 포함되지 않도록 하십시오.
. - + * / \
ActionScript를 사용하면 HTML 페이지에서 다음을 수행할 수 있습니다.
JavaScript를 사용하면 HTML 페이지에서 다음을 수행할 수 있습니다.
현재 Flash Player에서는 HTML 형식에 포함된 SWF 파일을 지원하지 않습니다.
참고 사항
| 속성 | 다음에 의해 정의됨 | ||
|---|---|---|---|
| available : Boolean
[static] [read-only]
이 플레이어가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 나타냅니다.
| ExternalInterface | ||
![]() | constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다.
| Object | |
| marshallExceptions : Boolean = false [static]
외부 인터페이스가 현재 브라우저로 ActionScript 예외를 전달하고 Flash Player로 JavaScript 예외를 전달하려고 시도해야 하는지 여부를 나타냅니다.
| ExternalInterface | ||
| objectID : String
[static] [read-only]
Internet Explorer에서는 object 태그의 id 특성을 반환하고, Netscape에서는 embed 태그의 name 특성을 반환합니다.
| ExternalInterface | ||
![]() | prototype : Object
[static]
클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다.
| Object | |
| 메서드 | 다음에 의해 정의됨 | ||
|---|---|---|---|
|
[static]
컨테이너로부터 호출 가능하도록 ActionScript 메서드를 등록합니다.
| ExternalInterface | ||
|
[static]
0개 이상의 인수를 전달하는 Flash Player 컨테이너에 의해 노출된 함수를 호출합니다.
| ExternalInterface | ||
![]() |
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다.
| Object | |
![]() |
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다.
| Object | |
![]() |
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다.
| Object | |
![]() |
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다.
| Object | |
![]() |
지정된 객체의 문자열 표현을 반환합니다.
| Object | |
![]() |
지정된 객체의 프리미티브 값을 반환합니다.
| Object | |
| available | 속성 |
available:Boolean [read-only]
| 언어 버전 : | ActionScript 3.0 |
| Player 버전 : | Flash Player 9 |
이 플레이어가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 나타냅니다. 외부 인터페이스를 사용할 수 있으면 이 속성은 true이고, 그렇지 않으면 false입니다.
참고: External API를 HTML과 함께 사용하는 경우 JavaScript 메서드를 호출하기 전에 항상 HTML이 로드를 마쳤는지 확인하십시오.
public static function get available():Boolean
참고 사항
available 속성을 사용하여 플레이어가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 확인합니다.
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);
}
}
}
| marshallExceptions | 속성 |
public static var marshallExceptions:Boolean = false
| 언어 버전 : | ActionScript 3.0 |
외부 인터페이스가 현재 브라우저로 ActionScript 예외를 전달하고 Flash Player로 JavaScript 예외를 전달하려고 시도해야 하는지 여부를 나타냅니다. ActionScript에서 JavaScript 예외를 포착하고 JavaScript에서 ActionScript 예외를 포착하려면 이 속성을 명시적으로 true로 설정해야 합니다.
플레이어 버전: Flash Player 9 업데이트 3
참고 사항
addCallback() 메서드를 사용하여 이것을 포함하는 브라우저에 등록합니다. 새 함수는 브라우저에서 실행되는 JavaScript 코드가 예외를 포착할 수 있도록 예외를 발생시킵니다. 또한 이 예제는 try..catch 문을 포함하여 throwit() 함수가 호출될 때 브라우저에서 발생하는 예외를 포착합니다.
package
{
import flash.external.*
import flash.net.*;
import flash.display.*;
import flash.system.System;
public class ext_test extends Sprite {
function ext_test():void {
ExternalInterface.marshallExceptions = true;
ExternalInterface.addCallback("g", g);
try {
ExternalInterface.call("throwit");
} catch(e:Error) {
trace(e)
}
}
function g() { throw new Error("exception from actionscript!!!!") }
}
}
| objectID | 속성 |
objectID:String [read-only]
| 언어 버전 : | ActionScript 3.0 |
| Player 버전 : | Flash Player 9 |
Internet Explorer에서는 object 태그의 id 특성을 반환하고, Netscape에서는 embed 태그의 name 특성을 반환합니다.
public static function get objectID():String
참고 사항
| addCallback | () | 메서드 |
public static function addCallback(functionName:String, closure:Function):void
| 언어 버전 : | ActionScript 3.0 |
| Player 버전 : | Flash Player 9 |
컨테이너로부터 호출 가능하도록 ActionScript 메서드를 등록합니다. 그런 다음 addCallBack()이 성공적으로 호출된 후에는 Flash Player에 등록된 함수를 컨테이너의 JavaScript 또는 ActiveX 코드를 사용하여 호출할 수 있습니다.
참고: 브라우저에서 실행되는 로컬 내용의 경우 ExternalInterface.addCallback() 메서드 호출은 SWF 파일 및 SWF가 포함된 웹 페이지가 local-trusted 보안 샌드박스에 있는 경우에만 실행됩니다. 자세한 내용은 다음을 참조하십시오.
매개 변수
functionName:String — 컨테이너가 해당 함수를 호출하는 이름입니다.
|
|
closure:Function — 호출할 함수 클로저입니다. 독립형 함수가 될 수도 있고 객체 인스턴스의 메서드를 참조하는 메서드 클로저가 될 수도 있습니다. 메서드 클로저를 전달하여 특정 객체 인스턴스의 메서드에서 콜백을 통제할 수 있습니다.
|
Error — 컨테이너는 수신 호출을 지원하지 않습니다. 수신 호출은 Windows용 Internet Explorer, 그리고 Mozilla 1.7.5 이상이나 Firefox 1.0 이상 등 NPRuntime API를 사용하는 브라우저에서만 지원됩니다.
|
|
SecurityError — 지정한 이름의 콜백이 사용자가 액세스할 수 없는 샌드박스의 ActionScript에 의해 이미 추가되었고 이 콜백을 덮어쓸 수 없습니다. 이 문제를 해결하려면 원래 addCallback() 메서드를 호출하는 ActionScript가 Security.allowDomain() 메서드도 함께 호출하도록 다시 작성하십시오.
|
|
SecurityError — 포함 환경이 호출 코드가 액세스할 수 없는 보안 샌드박스에 속합니다. 이 문제를 해결하려면 다음 단계를 따르십시오.
|
참고 사항
| call | () | 메서드 |
public static function call(functionName:String, ... arguments):*
| 언어 버전 : | ActionScript 3.0 |
| Player 버전 : | Flash Player 9 |
0개 이상의 인수를 전달하는 Flash Player 컨테이너에 의해 노출된 함수를 호출합니다. 함수를 사용할 수 없으면 호출은 null을 반환하고, 그렇지 않으면 함수가 제공하는 값을 반환합니다. 재귀는 Opera 또는 Netscape 브라우저에서 허용되지 않습니다. 이러한 브라우저에서 재귀 호출은 null 응답을 생성합니다. 재귀는 Internet Explorer와 Firefox 브라우저에서 지원됩니다.
컨테이너가 HTML 페이지이면 이 메서드는 script 요소에서 JavaScript 함수를 호출합니다.
컨테이너가 다른 ActiveX 컨테이너일 경우 이 메서드는 지정된 이름으로 FlashCall ActiveX 이벤트를 전달하고 컨테이너는 이벤트를 처리합니다.
컨테이너에서 Netscape 플러그-인을 호스팅하는 경우 새 NPRuntime 인터페이스에 대한 사용자 정의 지원을 쓸 수도 있고 HTML 컨트롤을 포함하고 HTML 컨트롤 내에 Flash Player를 포함할 수도 있습니다. HTML 컨트롤을 포함하면 기본 컨테이너 응용 프로그램에 대한 JavaScript 인터페이스를 통해 Flash Player와 통신할 수 있습니다.
참고: 브라우저에서 실행되는 로컬 내용의 경우, ExternalInterface.call() 메서드 호출은 SWF 파일 및 SWF가 포함된 웹 페이지(있는 경우)가 local-trusted 보안 샌드박스에 있는 경우에만 허용됩니다. SWF 내용을 포함하는 HTML 페이지에서 object 및 embed 태그의 allowNetworking 매개 변수를 설정하여 SWF 파일에서 이 메서드를 사용하지 못하도록 할 수 있습니다. 자세한 내용은 다음을 참조하십시오.
매개 변수
functionName:String — 컨테이너에서 호출될 함수의 영숫자 이름입니다.
|
|
... arguments — 컨테이너의 함수에 전달할 인수입니다. 0개 이상의 매개 변수를 쉼표로 구분하여 지정할 수 있습니다. 임의의 ActionScript 데이터 유형이 될 수 있습니다. 호출 대상이 JavaScript 함수인 경우 ActionScript 유형은 자동으로 JavaScript 유형으로 변환되며 다른 ActiveX 컨테이너가 호출된 경우 매개 변수는 요청 메시지에 인코딩됩니다.
|
* — 컨테이너로부터 수신한 응답입니다. 호출이 실패하면, 예를 들어 컨테이너에 이러한 함수가 없거나 인터페이스를 사용할 수 없으며 재귀가 발생하거나(Netscape 또는 Opera 브라우저에서) 보안 문제가 있으면 null이 반환되고 오류가 발생합니다.
|
Error — 컨테이너는 송신 호출을 지원하지 않습니다. 송신 호출은 Windows용 Internet Explorer, 그리고 Mozilla 1.7.5 이상이나 Firefox 1.0 이상 등 NPRuntime API를 사용하는 브라우저에서만 지원됩니다.
|
|
SecurityError — 포함 환경이 호출 코드가 액세스할 수 없는 보안 샌드박스에 속합니다. 이 문제를 해결하려면 다음 단계를 따르십시오.
|
참고 사항
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>
이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/ActionScriptLangRefV3/flash/external/ExternalInterface.html