표시 내용을 동적으로 로드

Flash Player 9 이상, Adobe AIR 1.0 이상

다음과 같은 외부 표시 에셋을 ActionScript 3.0 응용 프로그램으로 로드할 수 있습니다.

  • ActionScript 3.0에서 제작된 SWF 파일 - 이 파일은 Sprite 또는 MovieClip 클래스이거나 Sprite를 확장하는 모든 클래스가 될 수 있습니다.

  • 이미지 파일 - JPG, PNG 및 GIF 파일을 포함합니다.

  • AVM1 SWF 파일 - ActionScript 1.0 또는 2.0에서 작성된 SWF 파일입니다.

Loader 클래스를 사용하여 이러한 에셋을 로드합니다.

표시 객체 로드

Loader 객체는 SWF 파일과 그래픽 파일을 응용 프로그램으로 로드하는 데 사용됩니다. Loader 클래스는 DisplayObjectContainer 클래스의 하위 클래스입니다. Loader 객체는 하나의 자식 표시 객체(로드하는 SWF 또는 그래픽 파일을 나타내는 표시 객체)만 표시 목록에 포함할 수 있습니다. 다음 코드에서처럼 Loader 객체를 표시 목록에 추가할 때 로드된 자식 표시 객체를 표시 목록에 함께 추가합니다.

var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
this.addChild(pictLdr);

SWF 파일 또는 이미지가 로드되면 로드된 표시 객체를 다른 표시 객체 컨테이너(예: 다음 예제의 container DisplayObjectContainer 객체)로 이동할 수 있습니다.

import flash.display.*; 
import flash.net.URLRequest; 
import flash.events.Event; 
var container:Sprite = new Sprite(); 
addChild(container); 
var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);  
function imgLoaded(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

로드 진행률 모니터링

파일 로드가 시작되면 LoaderInfo 객체가 만들어집니다. LoaderInfo 객체는 로드 진행률, 로더 및 로드 대상의 URL, 해당 미디어의 총 바이트 수, 미디어의 공칭 높이 및 폭 등과 같은 정보를 제공합니다. 또한 LoaderInfo 객체는 로드 진행률을 모니터링하는 이벤트를 전달합니다.

다음 다이어그램에서는 LoaderInfo 객체가 SWF 파일의 기본 클래스 인스턴스, Loader 객체 그리고 Loader 객체에 의해 로드된 객체에서 서로 다른 용도로 사용되는 방법을 보여 줍니다.

LoaderInfo 객체를 Loader 객체와 로드된 표시 객체 모두의 속성으로 액세스할 수 있습니다. 로드가 시작되면 Loader 객체의 contentLoaderInfo 속성을 통해 LoaderInfo 객체에 즉시 액세스할 수 있습니다. 표시 객체에서 로드가 완료된 경우 표시 객체의 loaderInfo 속성을 통해 LoaderInfo 객체를 로드된 표시 객체의 속성으로 액세스할 수도 있습니다. 로드된 표시 객체의 loaderInfo 속성은 Loader 객체의 contentLoaderInfo 속성과 동일한 LoaderInfo 객체를 나타냅니다. 즉, LoaderInfo 객체는 로드된 객체와 해당 객체를 로드한 Loader 객체 간(로더와 로드 대상 간)에 공유됩니다.

로드된 내용의 속성에 액세스하려면 다음 코드처럼 이벤트 리스너를 LoaderInfo 객체에 추가합니다.

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
 
var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("Circle.swf"); 
ldr.load(urlReq); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
addChild(ldr); 
 
function loaded(event:Event):void 
{ 
    var content:Sprite = event.target.content; 
    content.scaleX = 2; 
}

자세한 내용은 이벤트 처리를 참조하십시오.

로드 컨텍스트 지정

Loader 클래스의 load() 또는 loadBytes() 메서드를 통해 외부 파일을 Flash Player 또는 AIR로 로드할 때 context 매개 변수를 선택적으로 지정할 수 있습니다. 이 매개 변수는 LoaderContext 객체입니다.

LoaderContext 클래스에는 로드된 내용을 사용하는 방법에 대한 컨텍스트를 정의할 수 있는 세 가지 속성이 포함되어 있습니다.

  • checkPolicyFile: 이 속성은 SWF 파일이 아닌 이미지 파일을 로드할 때만 사용합니다. 이 속성을 true로 설정하면 Loader는 원래 서버에서 정책 파일을 확인합니다(웹 사이트 컨트롤(정책 파일) 참조). 이러한 설정은 Loader 객체를 포함하는 SWF 파일의 도메인과 다른 도메인에서의 내용에 대해서만 필요합니다. 서버에서 Loader 도메인에 권한을 부여하면 Loader 도메인에 있는 SWF 파일의 ActionScript는 로드된 이미지에서 데이터를 액세스할 수 있습니다. 즉, BitmapData.draw() 명령을 사용하여 로드된 이미지에서 데이터를 액세스할 수 있습니다.

    Loader 객체의 도메인과 다른 도메인에서의 SWF 파일은 Security.allowDomain()을 호출하여 특정 도메인을 허용할 수 있습니다.

  • securityDomain: 이 속성은 이미지가 아닌 SWF 파일을 로드할 때만 사용합니다. Loader 객체를 포함하는 파일의 도메인과 다른 도메인에서의 SWF 파일에 대해 이 속성을 지정합니다. 이 옵션을 지정하면 Flash Player에서는 정책 파일이 있는지 확인합니다. 이 파일이 있는 경우 크로스 정책 파일에 허용된 도메인에서의 SWF 파일은 로드된 SWF 내용을 크로스 스크립팅할 수 있습니다. flash.system.SecurityDomain.currentDomain을 이 매개 변수로 지정할 수 있습니다.

  • applicationDomain: 이 속성은 ActionScript 3.0으로 작성된 SWF 파일을 로드할 때만 사용합니다. 이미지 파일이나 ActionScript 1.0 또는 2.0으로 작성된 SWF 파일은 해당하지 않습니다. 파일을 로드할 때 applicationDomain 매개 변수를 flash.system.ApplicationDomain.currentDomain으로 설정하여 Loader 객체와 동일한 응용 프로그램 도메인에 파일을 포함시키도록 지정할 수 있습니다. 로드된 SWF 파일을 동일한 응용 프로그램 도메인에 저장하면 해당 클래스에 직접 액세스할 수 있습니다. 이렇게 하면 연관된 클래스 이름을 통해 액세스할 수 있는 포함된 미디어가 들어 있는 SWF 파일을 로드할 때 유용합니다. 자세한 내용은 응용 프로그램 도메인 작업을 참조하십시오.

다음은 다른 도메인에서 비트맵을 로드할 때 정책 파일을 확인하는 예제입니다.

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

다음은 파일을 Loader 객체와 동일한 보안 샌드박스에 저장하기 위해 다른 도메인에서 SWF를 로드할 때 정책 파일을 확인하는 예제입니다. 이 코드는 로드된 SWF 파일에 있는 클래스를 Loader 객체와 동일한 응용 프로그램 도메인에 추가합니다.

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

자세한 내용은 Adobe Flash 플랫폼용 Adobe ActionScript 3.0 참조 설명서에서 LoaderContext 클래스를 참조하십시오.