| 패키지 | flash.system |
| 클래스 | public final class ApplicationDomain |
| 상속 | ApplicationDomain Object |
| 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
응용 프로그램 도메인은 Loader 클래스를 통해 외부 SWF 파일을 로드할 때 사용됩니다. 로드된 SWF 파일의 모든 ActionScript 3.0 정의는 응용 프로그램 도메인에 저장됩니다. 응용 프로그램 도메인은 Loader 객체의 load() 또는 loadBytes() 메서드에 대한 context 매개 변수로 전달되는 LoaderContext 객체의 applicationDomain 속성에서 지정됩니다. LoaderInfo 객체에는 읽기 전용 applicationDomain 속성도 들어 있습니다.
SWF 파일의 모든 코드는 응용 프로그램 도메인에 존재하도록 정의됩니다. 현재 응용 프로그램 도메인은 주 응용 프로그램이 실행되는 위치입니다. 시스템 도메인에는 현재 도메인을 포함하여 모든 응용 프로그램 도메인이 포함되므로 모든 Flash Player 클래스가 들어 있습니다.
시스템 도메인을 제외한 모든 응용 프로그램 도메인에는 부모 도메인이 연결되어 있습니다. 주 응용 프로그램의 응용 프로그램 도메인의 부모 도메인은 시스템 도메인입니다. 로드된 클래스는 부모에서 아직 정의되지 않은 경우에만 정의됩니다. 로드된 클래스 정의를 새 정의를 사용하여 재정의할 수는 없습니다.
응용 프로그램 도메인을 사용하는 예제를 보려면 ActionScript 3.0 프로그래밍을 참조하십시오.
ApplicationDomain() 생성자 함수를 사용하여 ApplicationDomain 객체를 만들 수 있습니다.
참고 사항
| 속성 | 다음에 의해 정의됨 | ||
|---|---|---|---|
![]() | constructor : Object 지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | |
| currentDomain : ApplicationDomain [정적] [읽기 전용] 코드가 실행되는 현재 응용 프로그램 도메인을 가져옵니다. | ApplicationDomain | ||
| domainMemory : ByteArray 이 ApplicationDomain 내에서 도메인 전역 메모리 작업을 수행할 대상 객체를 가져와 설정합니다. | ApplicationDomain | ||
| MIN_DOMAIN_MEMORY_LENGTH : uint [정적] [읽기 전용] ApplicationDomain.domainMemory로 사용하는 데 필요한 최소 메모리 객체 길이를 가져옵니다.. | ApplicationDomain | ||
| parentDomain : ApplicationDomain [읽기 전용] 이 응용 프로그램 도메인의 부모 도메인을 가져옵니다. | ApplicationDomain | ||
![]() | prototype : Object [정적] 클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다. | Object | |
| 메서드 | 다음에 의해 정의됨 | ||
|---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null) 새 응용 프로그램 도메인을 만듭니다. | ApplicationDomain | ||
지정된 응용 프로그램 도메인에서 공용 정의를 가져옵니다. | ApplicationDomain | ||
지정된 응용 프로그램 도메인 내에 공용 정의가 있는지 여부를 확인합니다. | ApplicationDomain | ||
![]() | 지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | |
![]() | Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | |
![]() | 지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | |
![]() | 루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | |
![]() | 지정된 객체의 문자열 표현을 반환합니다. | Object | |
![]() | 지정된 객체의 프리미티브 값을 반환합니다. | Object | |
| currentDomain | 속성 |
currentDomain:ApplicationDomain [읽기 전용] | 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
코드가 실행되는 현재 응용 프로그램 도메인을 가져옵니다.
public static function get currentDomain():ApplicationDomain참고 사항
| domainMemory | 속성 |
domainMemory:ByteArray [읽기/쓰기] | 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | Flash Player 10, AIR 1.5 |
이 ApplicationDomain 내에서 도메인 전역 메모리 작업을 수행할 대상 객체를 가져와 설정합니다.
public function get domainMemory():ByteArray public function set domainMemory(value:ByteArray):void| MIN_DOMAIN_MEMORY_LENGTH | 속성 |
MIN_DOMAIN_MEMORY_LENGTH:uint [읽기 전용] | 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | Flash Player 10, AIR 1.5 |
ApplicationDomain.domainMemory로 사용하는 데 필요한 최소 메모리 객체 길이를 가져옵니다.
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint| parentDomain | 속성 |
parentDomain:ApplicationDomain [읽기 전용] | 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
이 응용 프로그램 도메인의 부모 도메인을 가져옵니다.
public function get parentDomain():ApplicationDomain참고 사항
| ApplicationDomain | () | 생성자 |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)| 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
새 응용 프로그램 도메인을 만듭니다.
매개 변수parentDomain:ApplicationDomain (default = null) — 부모 도메인을 전달하지 않으면 이 응용 프로그램 도메인의 부모가 시스템 도메인으로 설정됩니다. |
| getDefinition | () | 메서드 |
public function getDefinition(name:String):Object| 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
지정된 응용 프로그램 도메인에서 공용 정의를 가져옵니다. 정의는 클래스, 네임스페이스 또는 함수의 정의가 될 수 있습니다.
매개 변수
name:String — 정의의 이름입니다. |
Object — 정의에 연결된 객체입니다. |
ReferenceError — 지정된 이름의 공용 정의가 없습니다. |
| hasDefinition | () | 메서드 |
public function hasDefinition(name:String):Boolean| 언어 버전: | ActionScript 3.0 |
| 런타임 버전: | AIR 1.0 Flash Player 9 |
지정된 응용 프로그램 도메인 내에 공용 정의가 있는지 여부를 확인합니다. 정의는 클래스, 네임스페이스 또는 함수의 정의가 될 수 있습니다.
매개 변수
name:String — 정의의 이름입니다. |
Boolean —
지정한 정의가 있으면 true, 그렇지 않으면 false 값입니다.
|
참고:
우선 다음 코드로 RuntimeClasses.swf 파일을 만듭니다.
package {
import flash.display.Sprite;
public class RuntimeClasses extends Sprite
{
public function RuntimeClasses()
{}
public function greet():String {
return("Hello World");
}
}
}그런 다음 아래 코드를 구현합니다.
package {
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.errors.IllegalOperationError;
import flash.events.Event;
import flash.text.TextField;
public class ApplicationDomainExample extends Sprite {
private var loader:ClassLoader;
private var tf:TextField = new TextField();
public function ApplicationDomainExample() {
addChild(tf);
loader = new ClassLoader();
loader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler);
loader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler);
loader.load("RuntimeClasses.swf");
}
private function loadErrorHandler(e:Event):void {
tf.text = "Load failed";
throw new IllegalOperationError("Cannot load the specified file.");
}
private function classLoadedHandler(e:Event):void {
var runtimeClassRef:Class = loader.getClass("RuntimeClasses");
var greeter:Object = new runtimeClassRef();
tf.text = greeter.greet();
}
}
}
import flash.display.Loader;
import flash.errors.IllegalOperationError;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
class ClassLoader extends EventDispatcher {
public static var CLASS_LOADED:String = "classLoaded";
public static var LOAD_ERROR:String = "loadError";
private var loader:Loader;
private var swfLib:String;
private var request:URLRequest;
private var loadedClass:Class;
public function ClassLoader() {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
}
public function load(lib:String):void {
swfLib = lib;
request = new URLRequest(swfLib);
var context:LoaderContext = new LoaderContext();
context.applicationDomain=ApplicationDomain.currentDomain;
loader.load(request,context);
}
public function getClass(className:String):Class {
try {
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
} catch (e:Error) {
throw new IllegalOperationError(className + " definition not found in " + swfLib);
}
return null;
}
private function completeHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.CLASS_LOADED));
}
private function ioErrorHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
}
private function securityErrorHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
}
}ApplicationDomain.currentDomain을 사용하도록 지시했습니다. 이런 경우 새 ApplicationDomain이 생성되므로 SWF에서 로드하는 두 번째 Greeter 클래스의 속성 및 메서드로 첫 번째 Greeter 클래스의 속성 및 메서드가 대체되지 않습니다. ClassLoader의 load 메서드에서 context.applicationDomain 속성을 수정하여 이를 테스트할 수 있습니다.
참고:
다음 코드를 사용하여 "en" 디렉토리에 Greeter.as 파일을 만듭니다.
package {
import flash.display.Sprite;
public class Greeter extends Sprite
{
public function Greeter()
{
}
public function greet():String {
return("Good Morning");
}
}
}그런 다음 "es" 디렉토리에 Greeter.as와 유사한 파일을 만듭니다.
package {
import flash.display.Sprite;
public class Greeter extends Sprite
{
public function Greeter()
{
}
public function greet():String {
return("Buenos Dias");
}
}
}두 SWF 파일을 모두 컴파일한 후 다음 코드를 구현합니다.
package {
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.errors.IllegalOperationError;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class ApplicationDomainExample2 extends Sprite {
private var spanishGreeterLoader:ClassLoader;
private var englishGreeterLoader:ClassLoader;
private var tf:TextField = new TextField();
private var greetersLoaded:uint = 0;
public function ApplicationDomainExample2() {
tf.autoSize = TextFieldAutoSize.LEFT;
addChild(tf);
spanishGreeterLoader = new ClassLoader();
spanishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler);
spanishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler);
spanishGreeterLoader.load("es/Greeter.swf");
englishGreeterLoader = new ClassLoader();
englishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler);
englishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler);
englishGreeterLoader.load("en/Greeter.swf");
}
private function loadErrorHandler(e:Event):void {
tf.text = "Load failed";
throw new IllegalOperationError("Cannot load the specified file.");
}
private function classLoadedHandler(e:Event):void {
greetersLoaded++;
if(greetersLoaded == 2) {
greet();
}
}
private function greet():void {
var spanishGreeter:Class = spanishGreeterLoader.getClass("Greeter");
var englishGreeter:Class = englishGreeterLoader.getClass("Greeter");
var greeter1 = new spanishGreeter();
var greeter2 = new englishGreeter();
tf.text = greeter1.greet() + "\n" + greeter2.greet();
}
}
}
import flash.display.Loader;
import flash.errors.IllegalOperationError;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
class ClassLoader extends EventDispatcher {
public static var CLASS_LOADED:String = "classLoaded";
public static var LOAD_ERROR:String = "loadError";
private var loader:Loader;
private var swfLib:String;
private var request:URLRequest;
private var loadedClass:Class;
public function ClassLoader() {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
}
public function load(lib:String):void {
swfLib = lib;
request = new URLRequest(swfLib);
var context:LoaderContext = new LoaderContext();
// context.applicationDomain = ApplicationDomain.currentDomain;
context.applicationDomain = new ApplicationDomain();
loader.load(request,context);
}
public function getClass(className:String):Class {
try {
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
} catch (e:Error) {
throw new IllegalOperationError(className + " definition not found in " + swfLib);
}
return null;
}
private function completeHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.CLASS_LOADED));
}
private function ioErrorHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
}
private function securityErrorHandler(e:Event):void {
dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
}
}