Pakiet | flash.system |
Klasa | public final class ApplicationDomain |
Dziedziczenie | ApplicationDomain Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Domeny aplikacji są używane wówczas, gdy zewnętrzny plik SWF został załadowany za pośrednictwem klasy Loader. Wszystkie definicje ActionScript 3.0 w ładowanym pliku SWF są przechowywane w domenie aplikacji, która jest określona przez właściwość applicationDomain
obiektu LoaderContext przekazanego jako parametr context
obiektu Loader metody load()
lub loadBytes()
. Obiekt LoaderInfo również zawiera właściwość applicationDomain
(tylko do odczytu).
Całość kodu zawartego w pliku SWF jest zdefiniowana celu istnienia w domenie aplikacji. Obecna domena aplikacji to ta, w której uruchomiona jest główna aplikacja. Domena systemu zawiera wszystkie domeny aplikacji, łącznie z bieżącą domeną, co oznacza, że zawiera wszystkie klasy Flash Player.
Każda domena aplikacji, z wyjątkiem domeny systemowej, jest skojarzona z domeną macierzystą. Domeną macierzystą domeny głównej aplikacji jest domena systemowa. Załadowane klasy są definiowane tylko wtedy, gdy nie zostały one już zdefiniowane przez obiekt nadrzędny. Nie jest możliwe nadpisanie definicji załadowanej klasy przy pomocy nowszej definicji.
Przykłady zastosowań domen aplikacji zawiera publikacja ActionScript 3.0 — Podręcznik dla programistów.
Funkcja konstruktora ApplicationDomain()
umożliwia utworzenie obiektu ApplicationDomain.
Powiązane elementy interfejsu API
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
currentDomain : ApplicationDomain [statyczny] [tylko do odczytu]
Pobiera bieżącą domenę aplikacji, w której jest wykonywany kod. | ApplicationDomain | ||
domainMemory : ByteArray
Pobiera i ustawia obiekt, dla którego będą działały operacje pamięci domen globalnych w domenie ApplicationDomain. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statyczny] [tylko do odczytu]
Pobiera minimalną ilość pamięci dla obiektu, która będzie używana jako wartość ApplicationDomain.domainMemory. | ApplicationDomain | ||
parentDomain : ApplicationDomain [tylko do odczytu]
Pobiera domenę macierzystą tej domeny aplikacji. | ApplicationDomain |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Tworzy nową domenę aplikacji. | ApplicationDomain | ||
Pobiera definicję publiczną z określonej domeny aplikacji. | ApplicationDomain | ||
Pobiera w pełni kwalifikowane nazwy publicznych definicji określonej domeny aplikacji. | ApplicationDomain | ||
Pozwala sprawdzić, czy w określonej domenie aplikacji istnieje definicja publiczna. | ApplicationDomain | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
currentDomain | właściwość |
currentDomain:ApplicationDomain
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Pobiera bieżącą domenę aplikacji, w której jest wykonywany kod.
Implementacja
public static function get currentDomain():ApplicationDomain
domainMemory | właściwość |
domainMemory:ByteArray
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Pobiera i ustawia obiekt, dla którego będą działały globalne operacje pamięci w domenie ApplicationDomain.
Implementacja
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | właściwość |
MIN_DOMAIN_MEMORY_LENGTH:uint
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Pobiera minimalną ilość pamięci dla obiektu, która będzie używana jako ApplicationDomain.domainMemory.
Implementacja
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | właściwość |
parentDomain:ApplicationDomain
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Pobiera domenę macierzystą tej domeny aplikacji.
Implementacja
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Konstruktor |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Tworzy nową domenę aplikacji.
ParametryparentDomain:ApplicationDomain (default = null ) — Jeśli nie zostanie wprowadzona żadna domena macierzysta, ta domena aplikacji przyjmie domenę systemową za domenę macierzystą.
|
getDefinition | () | metoda |
public function getDefinition(name:String):Object
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Pobiera definicję publiczną z określonej domeny aplikacji. Może to być definicja klasy, przestrzeni nazw lub funkcji.
Parametry
name:String — Nazwa definicji.
|
Object — Obiekt skojarzony z definicją.
|
Zgłasza
ReferenceError — Nie istnieje żadna definicja publiczna o określonej nazwie.
|
getQualifiedDefinitionNames | () | metoda |
public function getQualifiedDefinitionNames():Vector.<String>
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.3, AIR 3.3 |
Pobiera w pełni kwalifikowane nazwy publicznych definicji określonej domeny aplikacji. Może to być definicja klasy, przestrzeni nazw lub funkcji. Nazwy zwrócone przez tę metodę można przekazać do metody getDefinition()
, aby uzyskać obiekty definicji.
Zwrócony obiekt Vector jest typu String, przy czym każdy ciąg ma następujący format package.path::definitionName
Jeśli element definitionName
należy do pakietu najwyższego poziomu, element package.path::
jest pomijany.
Weźmy pod uwagę następującą definicję klasy:
package my.Example { public class SampleClass extends Sprite { } }
Ta metoda zwróci w tym przypadku ciąg „my.Example::SampleClass”.
ZwracaVector.<String> — Nieposortowany wektor ciągów będących nazwami definicji. Jeśli nie ma definicji, wektor jest pusty.Zwracany jest obiekt <String>.
|
Zgłasza
SecurityError — Definicja należy do domeny, do której nie ma dostępu kod wywołujący.
|
hasDefinition | () | metoda |
public function hasDefinition(name:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Pozwala sprawdzić, czy w określonej domenie aplikacji istnieje definicja publiczna. Może to być definicja klasy, przestrzeni nazw lub funkcji.
Parametry
name:String — Nazwa definicji.
|
Boolean — Wartość true , jeśli istnieje określona definicja; w przeciwnym wypadku false .
|
Uwagi:
- Klasa ClassLoader ładuje plik SWF, dlatego zabezpieczenia lokalne muszą być na poziomie systemu plików.
- Aby uruchomić ten przykład, należy utworzyć plik swf o nazwie RuntimeClasses.swf w tym samym katalogu, co plik ApplicationDomainExample.swf.
Należy rozpocząć od utworzenia pliku RuntimeClasses.swf z następującego kodu:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
Następnie należy zaimplementować poniższy kod:
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
. W tym przypadku tworzona jest nowa domena ApplicationDomain
, dzięki czemu właściwości i metody klasy Greeter
dowolnego pliku SWF załadowanego jako drugi nie zastąpią właściwości ani metod pierwszej klasy Greeter
. Istnieje możliwość upewnienia się, że nie dojdzie do zastąpienia — w tym celu należy zmodyfikować właściwość context.applicationDomain
w metodzie load
klasy ClassLoader
.
Uwagi:
- Klasa ClassLoader ładuje plik SWF, dlatego zabezpieczenia lokalne muszą być na poziomie systemu plików.
- Aby uruchomić ten przykład, należy utworzyć dwa pliki SWF o nazwie Greeter.swf w folderze „en” i „es”.
Należy utworzyć plik Greeter.as w katalogu „en”, korzystając z poniższego kodu:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Następnie należy utworzyć bardzo podobny plik Greeter.as w katalogu „es”:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Należy skompilować obydwa pliki i zaimplementować następujący kod:
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, 12:06 PM Z