패키지 | flash.system |
클래스 | public final class ApplicationDomain |
상속 | ApplicationDomain Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
응용 프로그램 도메인은 Loader 클래스를 통해 외부 SWF 파일을 로드할 때 사용됩니다. 로드된 SWF 파일의 모든 ActionScript 3.0 정의는 응용 프로그램 도메인에 저장됩니다. 응용 프로그램 도메인은 Loader 객체의 load()
또는 loadBytes()
메서드에 대한 context
매개 변수로 전달되는 LoaderContext 객체의 applicationDomain
속성에서 지정됩니다. LoaderInfo 객체에는 읽기 전용 applicationDomain
속성도 들어 있습니다.
SWF 파일의 모든 코드는 응용 프로그램 도메인에 존재하도록 정의됩니다. 현재 응용 프로그램 도메인은 주 응용 프로그램이 실행되는 위치입니다. 시스템 도메인에는 현재 도메인을 포함하여 모든 응용 프로그램 도메인이 포함되므로 모든 Flash Player 클래스가 들어 있습니다.
시스템 도메인을 제외한 모든 응용 프로그램 도메인에는 부모 도메인이 연결되어 있습니다. 주 응용 프로그램의 응용 프로그램 도메인의 부모 도메인은 시스템 도메인입니다. 로드된 클래스는 부모에서 아직 정의되지 않은 경우에만 정의됩니다. 로드된 클래스 정의를 새 정의를 사용하여 재정의할 수는 없습니다.
응용 프로그램 도메인의 사용 예는 ActionScript 3.0 개발자 안내서를 참조하십시오.
ApplicationDomain()
생성자 함수를 사용하여 ApplicationDomain 객체를 만들 수 있습니다.
기타 예제
관련 API 요소
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
currentDomain : ApplicationDomain [정적] [읽기 전용]
코드가 실행되는 현재 응용 프로그램 도메인을 가져옵니다. | ApplicationDomain | ||
domainMemory : ByteArray
이 ApplicationDomain 내에서 도메인 전역 메모리 작업을 수행할 대상 객체를 가져와 설정합니다. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [정적] [읽기 전용]
ApplicationDomain.domainMemory로 사용하는 데 필요한 최소 메모리 객체 길이를 가져옵니다. | ApplicationDomain | ||
parentDomain : ApplicationDomain [읽기 전용]
이 응용 프로그램 도메인의 부모 도메인을 가져옵니다. | ApplicationDomain |
메서드 | 정의 주체 | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
새 응용 프로그램 도메인을 만듭니다. | ApplicationDomain | ||
지정된 응용 프로그램 도메인에서 공용 정의를 가져옵니다. | ApplicationDomain | ||
지정된 응용 프로그램 도메인에서 공용 정의의 정규화된 이름을 모두 가져옵니다. | ApplicationDomain | ||
지정된 응용 프로그램 도메인 내에 공용 정의가 있는지 여부를 확인합니다. | ApplicationDomain | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
currentDomain | 속성 |
currentDomain:ApplicationDomain
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
코드가 실행되는 현재 응용 프로그램 도메인을 가져옵니다.
구현
public static function get currentDomain():ApplicationDomain
domainMemory | 속성 |
MIN_DOMAIN_MEMORY_LENGTH | 속성 |
parentDomain | 속성 |
parentDomain:ApplicationDomain
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
이 응용 프로그램 도메인의 부모 도메인을 가져옵니다.
구현
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | 생성자 |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
새 응용 프로그램 도메인을 만듭니다.
매개 변수parentDomain:ApplicationDomain (default = null ) — 부모 도메인을 전달하지 않으면 이 응용 프로그램 도메인의 부모가 시스템 도메인으로 설정됩니다.
|
getDefinition | () | 메서드 |
public function getDefinition(name:String):Object
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
지정된 응용 프로그램 도메인에서 공용 정의를 가져옵니다. 정의는 클래스, 네임스페이스 또는 함수의 정의가 될 수 있습니다.
매개 변수
name:String — 정의의 이름입니다.
|
Object — 정의에 연결된 객체입니다.
|
오류
ReferenceError — 지정된 이름의 공용 정의가 없습니다.
|
getQualifiedDefinitionNames | () | 메서드 |
public function getQualifiedDefinitionNames():Vector.<String>
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.3, AIR 3.3 |
지정된 응용 프로그램 도메인에서 공용 정의의 정규화된 이름을 모두 가져옵니다. 정의는 클래스, 네임스페이스 또는 함수의 정의가 될 수 있습니다. 이 메서드에서 반환되는 이름은 실제 정의의 객체를 가져오는 getDefinition()
메서드로 전달할 수 있습니다.
반환된 벡터는 문자열 유형이며 각 문자열의 형태는 다음과 같습니다. package.path::definitionName
definitionName
이 최상위 패키지에 있는 경우 package입니다.path::
는 생략됩니다.
예를 들어 다음과 같은 클래스 정의가 있는 경우
package my.Example { public class SampleClass extends Sprite { } }
이 메서드는 "my.Example::SampleClass"를 반환합니다.
반환값Vector.<String> — 정의 이름에 해당하는 문자열의 정렬되지 않은 벡터입니다. 정의가 없는 경우 비어 있는 벡터입니다.<String>이 반환됩니다.
|
오류
SecurityError — 정의는 호출 코드가 액세스할 수 없는 도메인에 속해 있습니다.
|
hasDefinition | () | 메서드 |
참고:
- ClassLoader 클래스에서는 SWF 파일을 로드하므로 파일 시스템 수준의 로컬 보안이 필요합니다.
- 이 예제를 실행하려면 ApplicationDomainExample.swf 파일과 같은 폴더에 RuntimeClasses.swf라는 swf 파일이 있어야 합니다.
우선 다음 코드로 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
속성을 수정하여 이를 테스트할 수 있습니다.
참고:
- ClassLoader 클래스에서는 SWF 파일을 로드하므로 파일 시스템 수준의 로컬 보안이 필요합니다.
- 이 예제를 실행하려면 "en"과 "es" 폴더 각각에 Greeter.swf라는 SWF 파일 두 개가 있어야 합니다.
다음 코드를 사용하여 "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)); } }
Tue Jun 12 2018, 03:17 PM Z