Paket | flash.system |
Klass | public final class ApplicationDomain |
Arv | ApplicationDomain Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Programdomäner används när en extern SWF-fil läses in via Loader-klassen. Alla ActionScript 3.0-definitioner i den inlästa SWF-filen lagras i programdomänen som anges av egenskapen applicationDomain
i det LoaderContext-objekt du skickar som en context
-parameter för Loader-objektets load()
- eller loadBytes()
-metod. LoaderInfo-objektet innehåller också en skrivskyddad applicationDomain
-egenskap.
All kod i en SWF-fil är definierad för att finnas i en programdomän. Den aktuella programdomänen är där huvudprogrammet körs. Systemdomänen innehåller alla programdomäner, inklusive den aktuella domänen, vilket betyder att den innehåller alla Flash Player-klasser.
Alla programdomäner utom systemdomänen har en tillhörande överordnad domän. Den överordnade domänen för huvudprogrammets programdomän är systemdomänen. Inlästa klasser definieras bara om de inte redan är definierade av sina överordnade klasser. Du kan inte åsidosätta en inläst klassdefinition med en nyare definition.
Exempel på användning av programdomäner finns i Utvecklarhandbok för Adobe ActionScript 3.0.
Med ApplicationDomain()
-konstruktorfunktionen kan du skapa ett nytt ApplicationDomain-objekt.
Fler exempel
Relaterade API-element
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Egenskap | Definieras med | ||
---|---|---|---|
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
currentDomain : ApplicationDomain [statisk] [skrivskyddad]
Hämtar programdomänen din kod körs i nu. | ApplicationDomain | ||
domainMemory : ByteArray
Hämtar och anger objektet för vilket domänglobala minnesåtgärder ska användas i denna ApplicationDomain. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statisk] [skrivskyddad]
Hämtar minsta minnesobjektslängd som krävs för användning som ApplicationDomain.domainMemory. | ApplicationDomain | ||
parentDomain : ApplicationDomain [skrivskyddad]
Hämtar den överordnade domänen för den här programdomänen. | ApplicationDomain |
Metod | Definieras med | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Skapar en ny programdomän. | ApplicationDomain | ||
Hämtar en publik definition från den angivna programdomänen. | ApplicationDomain | ||
Hämtar alla fullständiga, kvalificerade namn på offentliga definitioner från angiven programdomän. | ApplicationDomain | ||
Kontrollerar om det finns en publik definition i den angivna programdomänen. | ApplicationDomain | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object |
currentDomain | egenskap |
currentDomain:ApplicationDomain
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Hämtar programdomänen din kod körs i nu.
Implementering
public static function get currentDomain():ApplicationDomain
domainMemory | egenskap |
domainMemory:ByteArray
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Hämtar och anger objektet för vilket domänglobala minnesåtgärder ska användas i denna ApplicationDomain.
Implementering
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | egenskap |
MIN_DOMAIN_MEMORY_LENGTH:uint
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Hämtar minsta minnesobjektslängd som krävs för användning som ApplicationDomain.domainMemory.
Implementering
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | egenskap |
parentDomain:ApplicationDomain
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Hämtar den överordnade domänen för den här programdomänen.
Implementering
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Konstruktor |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skapar en ny programdomän.
ParametrarparentDomain:ApplicationDomain (default = null ) — Om ingen överordnad domän har skickats, betraktar den här programdomänen systemdomänen som överordnad.
|
getDefinition | () | metod |
public function getDefinition(name:String):Object
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Hämtar en publik definition från den angivna programdomänen. Definitionen kan avse en klass, ett namnutrymme eller en funktion.
Parametrar
name:String — Definitionens namn.
|
Object — Det objekt som är associerat med definitionen.
|
Utlöser
ReferenceError — Det finns ingen offentlig definition med det angivna namnet.
|
getQualifiedDefinitionNames | () | metod |
public function getQualifiedDefinitionNames():Vector.<String>
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.3, AIR 3.3 |
Hämtar alla fullständiga, kvalificerade namn på offentliga definitioner från angiven programdomän. Definitionen kan avse en klass, ett namnutrymme eller en funktion. De namn som returneras från den här metoden kan skickas till metoden getDefinition()
för att hämta den faktiska definitionens objekt.
Den returnerade vektorn har typen String, där varje String har formatet: package.path::definitionName
Om definitionName
är i paketet på den översta nivån utesluts package.path::
.
För följande klassdefinition:
package my.Example { public class SampleClass extends Sprite { } }
returnerar den här metoden "my.Example::SampleClass".
ReturnerarVector.<String> — En osorterad vektor med strängar, som är namnen på definitionerna. En tom vektor, om det inte finns någon definition.<String> returneras.
|
Utlöser
SecurityError — Definitionen tillhör en domän som den anropande koden inte har tillgång till.
|
hasDefinition | () | metod |
public function hasDefinition(name:String):Boolean
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Kontrollerar om det finns en publik definition i den angivna programdomänen. Definitionen kan avse en klass, ett namnutrymme eller en funktion.
Parametrar
name:String — Definitionens namn.
|
Boolean — Värdet true om det finns en angiven definition, i annat fall false .
|
Obs!
- Eftersom ClassLoader-klassen läser in en SWF-fil måste lokal säkerhet vara på filsystemnivå.
- Om du ska köra det här exemplet måste du ha en SWF-fil med namnet RuntimeClasses.swf i samma mapp som filen ApplicationDomainExample.swf.
Börja med att skapa filen RuntimeClasses.swf från följande kod:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
Implementera följande 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
. I det här fallet skapas en ny ApplicationDomain
vilket betyder att egenskaperna och metoderna i den andra Greeter
-klassen där SWF-filen läses in, inte ersätter egenskaperna och klasserna i den första Greeter
-klassen. Du kan testa det här genom att ändra egenskapen context.applicationDomain
i metoden load
i ClassLoader
.
Obs!
- Eftersom ClassLoader-klassen läser in en SWF-fil måste lokal säkerhet vara på filsystemnivå.
- Om du ska köra det här exemplet måste du ha två SWF-filer med namnet Greeter.swf i en "en"-mapp respektive en "es"-mapp.
Skapa en Greeter.as-fil i en "en"-katalog med följande kod:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Skapa sedan en liknande Greeter.as-fil i katalogen "es".
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Kompilera SWF-filerna för båda, och implementera sedan följande 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, 01:40 PM Z