ActionScript 객체를 JavaScript에서 사용할 수 있도록 지정

Adobe AIR 1.0 이상

HTMLLoader 객체에서 로드하는 HTML 페이지의 JavaScript는 HTML 페이지의 window.runtime, window.htmlLoader, 및 window.nativeWindow 속성을 사용하여 ActionScript 실행 컨텍스트에 정의된 클래스, 객체 및 함수를 호출할 수 있습니다. 또한 JavaScript 실행 컨텍스트 내에서 ActionScript 객체 및 함수에 대한 참조를 만들어 이러한 객체 및 함수를 JavaScript 코드에서 사용할 수 있도록 지정할 수 있습니다.

ActionScript에서 JavaScript 객체에 액세스하는 기본 예제

다음 예제에서는 ActionScript 객체를 참조하는 속성을 HTML 페이지의 전역 window 객체에 추가하는 방법을 보여 줍니다.

var html:HTMLLoader = new HTMLLoader(); 
var foo:String = "Hello from container SWF."  
function helloFromJS(message:String):void { 
    trace("JavaScript says:", message); 
} 
var urlReq:URLRequest = new URLRequest("test.html"); 
html.addEventListener(Event.COMPLETE, loaded); 
html.load(urlReq); 
 
function loaded(e:Event):void{ 
    html.window.foo = foo; 
    html.window.helloFromJS = helloFromJS; 
}

이전 예제에 나와 있는 HTMLLoader 객체로 로드된 HTML 내용(test.html이라는 파일에 포함)은 부모 SWF 파일에 정의되어 있는 foo 속성 및 helloFromJS() 메서드에 액세스할 수 있습니다.

<html> 
    <script> 
        function alertFoo() { 
            alert(foo);  
        } 
    </script> 
    <body> 
        <button onClick="alertFoo()"> 
            What is foo? 
        </button> 
        <p><button onClick="helloFromJS('Hi.')"> 
            Call helloFromJS() function. 
        </button></p> 
    </body> 
</html>

로드 중인 문서의 JavaScript 컨텍스트에 액세스할 때 htmlDOMInitialize 이벤트를 사용하면 페이지에 정의되어 있는 스크립트에서 액세스할 수 있도록 페이지 생성 시퀀스에서 충분히 초기에 객체를 만들 수 있습니다. complete 이벤트를 기다릴 때 페이지 load 이벤트 이후에 실행하는 페이지의 스크립트만 추가된 객체에 액세스할 수 있습니다.

클래스 정의를 JavaScript에서 사용할 수 있도록 지정

응용 프로그램의 ActionScript 클래스를 JavaScript에서 사용할 수 있도록 지정하려면 로드된 HTML 내용을 클래스 정의를 포함하는 응용 프로그램 도메인에 할당합니다. JavaScript 실행 컨텍스트의 응용 프로그램 도메인은 HTMLLoader 객체의 runtimeApplicationDomain 속성을 사용하여 설정할 수 있습니다. 예를 들어 응용 프로그램 도메인을 기본 응용 프로그램 도메인으로 설정하려면 다음 코드에 나와 있는 대로 runtimeApplicationDomainApplicationDomain.currentDomain으로 설정합니다.

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

runtimeApplicationDomain 속성이 설정되면 JavaScript 컨텍스트가 클래스 정의를 할당된 도메인과 공유합니다. JavaScript에서 사용자 정의 클래스의 인스턴스를 만들려면 window.runtime 속성을 통해 클래스 정의를 참조하고 new 연산자를 사용합니다.

var customClassObject = new window.runtime.CustomClass();

HTML 내용은 호환되는 보안 도메인에서 가져와야 합니다. HTML 내용을 사용자가 할당하는 응용 프로그램 도메인의 보안 도메인이 아닌 다른 보안 도메인에서 가져온 경우 페이지는 대신 기본 응용 프로그램 도메인을 사용합니다. 예를 들어 인터넷에서 원격 페이지를 로드하는 경우 ApplicationDomain.currentDomain을 페이지의 응용 프로그램 도메인으로 할당할 수 없습니다.

이벤트 리스너 제거

JavaScript 이벤트 리스너를 현재 페이지 외부에 있는 객체(런타임 객체, 로드된 SWF 내용의 객체, 다른 페이지에서 실행하는 JavaScript 객체까지 포함)에 추가하는 경우 페이지가 언로드할 때 항상 이러한 이벤트 리스너를 제거해야 합니다. 그렇지 않으면 이벤트 리스너가 이벤트를 더 이상 존재하지 않는 핸들러 함수에 전달합니다. 이러한 작업이 수행되면 “응용 프로그램에서 더 이상 로드되지 않는 HTML 페이지의 JavaScript 객체를 참조하려고 합니다."라는 오류 메시지가 표시됩니다. 필요 없는 이벤트 리스너를 제거해도 AIR이 관련된 메모리를 회수합니다. 자세한 내용은 탐색하는 HTML 페이지의 이벤트 리스너 제거를 참조하십시오.