패키지 | flash.external |
클래스 | public final class ExternalInterface |
상속 | ExternalInterface Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
ExternalInterface 클래스를 사용하면 HTML 페이지에서 JavaScript를 사용하여 Flash 런타임에서 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 페이지에 포함할 때는 id
특성을 설정해야 하며 id
및 name
특성(object
및 embed
태그)에 다음 문자가 포함되지 않아야 합니다.
. - + * / \
Flash Player 응용 프로그램 참고 사항: Flash Player 버전 9.0.115.0 이상에서는 .
(마침표) 문자를 id
및 name
특성 내에 사용할 수 있습니다.
Flash Player 응용 프로그램 참고 사항: 브라우저에서 실행되는 Flash Player 10 이상에서는 이 클래스를 프로그래밍 방식으로 사용하여 팝업 윈도우를 열지 못할 수 있습니다. 브라우저 및 브라우저 구성에 따라 팝업 윈도우가 차단될 수 있으므로 팝업 윈도우가 나타나는 것을 보장할 수 없습니다. 그러나 팝업 윈도우를 확실하게 표시하기 위해 사용자 동작(예: 마우스 클릭이나 키 누르기 이벤트의 이벤트 핸들러)의 결과로 실행하는 코드에서 이 클래스를 사용하면 팝업 윈도우를 열 수 있습니다.
ActionScript를 사용하면 HTML 페이지에서 다음을 수행할 수 있습니다.
- 임의의 JavaScript 함수 호출
- 이름 및 개수에 관계없이 모든 인수 전달
- 다양한 데이터 유형(Boolean, Number, String 등) 전달
- JavaScript 함수에서 반환 값 수신
JavaScript를 사용하면 HTML 페이지에서 다음을 수행할 수 있습니다.
- ActionScript 함수 호출
- 표준 함수 호출 표기법으로 인수 전달
- JavaScript 함수에 값 반환
Flash Player 응용 프로그램 참고 사항: Flash Player는 현재 HTML 양식 내에 포함된 SWF 파일을 지원하지 않습니다.
AIR 응용 프로그램 참고 사항: Adobe AIR에서는 HTMLLoader 컨트롤에서 로드한 HTML 페이지의 JavaScript와 해당 HTML 페이지에 포함된 SWF 내용의 ActionScript 간의 통신에 ExternalInterface 클래스를 사용할 수 있습니다.
기타 예제
Accessing Flex from JavaScript
About ExternalInterface API security in Flex
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
available : Boolean [정적] [읽기 전용]
이 플레이어가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 나타냅니다. | ExternalInterface | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
marshallExceptions : Boolean = false [정적]
외부 인터페이스가 현재 브라우저로 ActionScript 예외를 전달하고 플레이어로 JavaScript 예외를 전달하려고 시도해야 하는지 여부를 나타냅니다. | ExternalInterface | ||
objectID : String [정적] [읽기 전용]
Internet Explorer에서는 object 태그의 id 특성을 반환하고, Netscape에서는 embed 태그의 name 특성을 반환합니다. | ExternalInterface |
메서드 | 정의 주체 | ||
---|---|---|---|
[정적]
컨테이너로부터 호출 가능하도록 ActionScript 메서드를 등록합니다. | ExternalInterface | ||
[정적]
0개 이상의 인수를 전달하는 SWF 컨테이너에 의해 노출된 함수를 호출합니다. | ExternalInterface | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
available | 속성 |
available:Boolean
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
이 플레이어가 외부 인터페이스를 제공하는 컨테이너에 있는지 여부를 나타냅니다. 외부 인터페이스를 사용할 수 있으면 이 속성은 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 |
런타임 버전: | AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4 |
외부 인터페이스가 현재 브라우저로 ActionScript 예외를 전달하고 플레이어로 JavaScript 예외를 전달하려고 시도해야 하는지 여부를 나타냅니다. ActionScript에서 JavaScript 예외를 포착하고 JavaScript에서 ActionScript 예외를 포착하려면 이 속성을 명시적으로 true
로 설정해야 합니다.
관련 API 요소
예제 ( 예제 사용 방법 )
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 | 속성 |
addCallback | () | 메서드 |
public static function addCallback(functionName:String, closure:Function):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
컨테이너로부터 호출 가능하도록 ActionScript 메서드를 등록합니다. addCallBack()
이 성공적으로 호출된 후에는 플레이어에 등록된 함수를 컨테이너의 JavaScript 또는 ActiveX 코드를 사용하여 호출할 수 있습니다.
참고: 브라우저에서 실행되는 로컬 내용의 경우 ExternalInterface.addCallback()
메서드 호출은 SWF 파일 및 SWF가 포함된 웹 페이지가 local-trusted 보안 샌드박스에 있는 경우에만 실행됩니다. 자세한 내용은 Flash Player 개발자 센터 항목(보안)을 참조하십시오.
매개 변수
functionName:String — 컨테이너가 해당 함수를 호출하는 이름입니다.
| |
closure:Function — 호출할 함수 클로저입니다. 독립형 함수가 될 수도 있고 객체 인스턴스의 메서드를 참조하는 메서드 클로저가 될 수도 있습니다. 메서드 클로저를 전달하여 특정 객체 인스턴스의 메서드에서 콜백을 통제할 수 있습니다.
참고: |
오류
Error — 컨테이너는 수신 호출을 지원하지 않습니다. 수신 호출은 Windows용 Internet Explorer, 그리고 Mozilla 1.7.5 이상이나 Firefox 1.0 이상 등 NPRuntime API를 사용하는 브라우저에서만 지원됩니다.
| |
SecurityError — 지정한 이름의 콜백이 사용자가 액세스할 수 없는 샌드박스의 ActionScript에 의해 이미 추가되었고 이 콜백을 덮어쓸 수 없습니다. 이 문제를 해결하려면 원래 addCallback() 메서드를 호출하는 ActionScript가 Security.allowDomain() 메서드도 함께 호출하도록 다시 작성하십시오.
| |
SecurityError — 포함 환경이 호출 코드가 액세스할 수 없는 보안 샌드박스에 속합니다. 이 문제를 해결하려면 다음 단계를 따르십시오.
|
관련 API 요소
call | () | 메서드 |
public static function call(functionName:String, ... arguments):*
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
0개 이상의 인수를 전달하는 SWF 컨테이너에 의해 노출된 함수를 호출합니다. 함수를 사용할 수 없으면 호출은 null
을 반환하고, 그렇지 않으면 함수가 제공하는 값을 반환합니다. 재귀는 Opera 또는 Netscape 브라우저에서 허용되지 않습니다. 이러한 브라우저에서 재귀 호출은 null
응답을 생성합니다. 재귀는 Internet Explorer와 Firefox 브라우저에서 지원됩니다.
컨테이너가 HTML 페이지이면 이 메서드는 script
요소에서 JavaScript 함수를 호출합니다.
컨테이너가 다른 ActiveX 컨테이너일 경우 이 메서드는 지정된 이름으로 FlashCall ActiveX 이벤트를 전달하고 컨테이너는 이벤트를 처리합니다.
컨테이너에서 Netscape 플러그인을 호스팅하는 경우 새 NPRuntime 인터페이스에 대한 사용자 정의 지원을 작성하거나, HTML 컨트롤을 포함하고 HTML 컨트롤 내에 플레이어를 포함할 수 있습니다. HTML 컨트롤을 포함하면 기본 컨테이너 응용 프로그램에 대한 JavaScript 인터페이스를 통해 플레이어와 통신할 수 있습니다.
참고: 브라우저에서 실행되는 로컬 내용의 경우, ExternalInterface.call()
메서드 호출은 SWF 파일 및 SWF가 포함된 웹 페이지(있는 경우)가 local-trusted 보안 샌드박스에 있는 경우에만 허용됩니다. 또한 SWF 내용이 들어 있는 HTML 페이지에서 allowNetworking
매개 변수(object
및 embed
태그)를 설정하여 SWF 파일에서 이 메서드를 사용하지 못하게 할 수 있습니다. 자세한 내용은 Flash Player 개발자 센터 항목(보안)을 참조하십시오.
Flash Player 응용 프로그램 참고 사항: Flash Player 10 및 Flash Player 9 업데이트 5의 경우 팝업 차단이 활성화되어 있으면 일부 웹 브라우저에서 이 메서드가 제한됩니다. 이 시나리오에서는 마우스 클릭이나 키 누르기 이벤트에 대한 이벤트 핸들러 등 사용자 이벤트에 대한 응답으로만 이 메서드를 호출할 수 있습니다.
매개 변수
functionName:String — 컨테이너에서 호출될 함수의 영숫자 이름입니다. 영숫자가 아닌 함수 이름을 사용하면 런타임 오류가 발생합니다(오류 2155). try..catch 블록을 사용하여 오류를 처리할 수 있습니다.
| |
... arguments — 컨테이너의 함수에 전달할 인수입니다. 0개 이상의 매개 변수를 쉼표로 구분하여 지정할 수 있습니다. 임의의 ActionScript 데이터 유형이 될 수 있습니다. 호출 대상이 JavaScript 함수인 경우 ActionScript 유형은 자동으로 JavaScript 유형으로 변환되며 다른 ActiveX 컨테이너가 호출된 경우 매개 변수는 요청 메시지에 인코딩됩니다.
|
* — 컨테이너로부터 수신한 응답입니다. 호출이 실패하면, 예를 들어 컨테이너에 이러한 함수가 없거나 인터페이스를 사용할 수 없으며 재귀가 발생하거나(Netscape 또는 Opera 브라우저에서) 보안 문제가 있으면 null 이 반환되고 오류가 발생합니다.
|
오류
Error — 컨테이너는 송신 호출을 지원하지 않습니다. 송신 호출은 Windows용 Internet Explorer, 그리고 Mozilla 1.7.5 이상이나 Firefox 1.0 이상 등 NPRuntime API를 사용하는 브라우저에서만 지원됩니다.
| |
SecurityError — 포함 환경이 호출 코드가 액세스할 수 없는 보안 샌드박스에 속합니다. 이 문제를 해결하려면 다음 단계를 따르십시오.
|
예제 ( 예제 사용 방법 )
// // Requires: // - A Flash Professional Label component on the Stage with an instance name of "lbl". // - A Flash Professional Button component on the Stage with an instance name of "button". // var xmlResponse:String = "<invoke name=\"isReady\" returntype=\"xml\"><arguments><number>1</number><number>" + stage.stageWidth + "</number><number>" + stage.stageHeight + "</number></arguments></invoke>"; lbl.text = "ExternalInterface.available: " + ExternalInterface.available; lbl.width = 200; button.enabled = ExternalInterface.available; button.addEventListener(MouseEvent.CLICK, button_click); function button_click(evt:MouseEvent):void { ExternalInterface.call("alert", xmlResponse); }
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; import flash.system.Security; public class ExternalInterfaceExample extends Sprite { private var input:TextField; private var output:TextField; private var sendBtn:Sprite; public function ExternalInterfaceExample() { // constructor code Security.allowDomain("*"); 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"); output.appendText("ExternalInterface.objectID = " + ExternalInterface.objectID + "\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 sendToActionScript(value) { document.getElementById("ExternalInterfaceExample").sendToActionScript(value); } function sendToJavaScript(value) { document.forms["form1"].output.value += "ActionScript says: " + value + "\n"; } </script> </head> <body onload="pageInit();"> <object id="ExternalInterfaceExample" name="ExternalInterfaceExample" type="application/x-shockwave-flash" data="ExternalInterfaceExample.swf" width="550" height="400"> <param name="movie" value="ExternalInterfaceExample.swf"/> <param name="quality" value="high"/> <param name="allowscriptaccess" value="always"/> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/> </a> </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>
Tue Jun 12 2018, 03:17 PM Z