Pakket | flash.system |
Klasse | public final class ApplicationDomain |
Overerving | ApplicationDomain Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Applicatiedomeinen worden gebruikt wanneer een extern SWF-bestand door de klasse Loader wordt geladen. Alle ActionScript 3.0-definities in het geladen SWF-bestand worden in het toepassingsdomein opgeslagen dat door de eigenschap applicationDomain
van het object LoaderContext is opgegeven en dat u doorgeeft als een parameter context
van de methode load()
of loadBytes()
van het object Loader. Het object LoaderInfo bevat ook een eigenschap applicationDomain
. Deze eigenschap is alleen-lezen.
Alle code in een SWF-bestand wordt zo gedefinieerd dat deze geschikt is voor een toepassingsdomein. Het huidige toepassingsdomein is het domein waarop uw hoofdtoepassing wordt uitgevoerd. Het systeemdomein bevat alle toepassingsdomeinen, inclusief het huidige domein. Dit betekent dat het alle Flash Player-klassen bevat.
Aan alle toepassingsdomeinen, met uitzondering van het systeemdomein, is een bovenliggend domein gekoppeld. Het bovenliggende domein van het toepassingsdomein van de hoofdtoepassing is het systeemdomein. Geladen klassen worden alleen gedefinieerd wanneer dit niet wordt gedaan door het bovenliggende domein. U kunt een definitie van een geladen klasse niet overschrijven met een nieuwe definitie.
Zie de Adobe ActionScript 3.0-ontwikkelaarsgids voor gebruiksvoorbeelden van toepassingsdomeinen.
Met de constructorfunctie ApplicationDomain()
kunt u een object ApplicationDomain maken.
Meer voorbeelden
Verwante API-elementen
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
currentDomain : ApplicationDomain [statisch] [alleen-lezen]
Haalt de huidige toepassing op waarin uw code wordt uitgevoerd. | ApplicationDomain | ||
domainMemory : ByteArray
Hiermee wordt het object verkregen en ingesteld waarop domein-globale geheugenbewerkingen binnen dit ApplicationDomain worden uitgevoerd. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statisch] [alleen-lezen]
Hiermee wordt de minimale lengte van het geheugenobject verkregen die vereist is om te worden gebruikt als ApplicationDomain.domainMemory. | ApplicationDomain | ||
parentDomain : ApplicationDomain [alleen-lezen]
Haalt het bovenliggende domein van dit toepassingsdomein op. | ApplicationDomain |
Methode | Gedefinieerd door | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Maakt een nieuw toepassingsdomein. | ApplicationDomain | ||
Haalt een publieke definitie uit het opgegeven toepassingsdomein op. | ApplicationDomain | ||
Hiermee worden alle volledig gekwalificeerde namen van openbare definities opgehaald uit het opgegeven toepassingsdomein. | ApplicationDomain | ||
Controleert of een publieke definitie bestaat binnen het opgegeven toepassingsdomein. | ApplicationDomain | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
currentDomain | eigenschap |
currentDomain:ApplicationDomain
[alleen-lezen] Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Haalt de huidige toepassing op waarin uw code wordt uitgevoerd.
Implementatie
public static function get currentDomain():ApplicationDomain
domainMemory | eigenschap |
domainMemory:ByteArray
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Hiermee wordt het object verkregen en ingesteld waarop domein-globale geheugenbewerkingen binnen dit ApplicationDomain worden uitgevoerd.
Implementatie
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | eigenschap |
MIN_DOMAIN_MEMORY_LENGTH:uint
[alleen-lezen] Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Hiermee wordt de minimale lengte van het geheugenobject verkregen die vereist is om te worden gebruikt als ApplicationDomain.domainMemory.
Implementatie
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | eigenschap |
parentDomain:ApplicationDomain
[alleen-lezen] Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Haalt het bovenliggende domein van dit toepassingsdomein op.
Implementatie
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Constructor |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Maakt een nieuw toepassingsdomein.
ParametersparentDomain:ApplicationDomain (default = null ) — Wanneer er geen bovenliggend domein wordt doorgegeven, neemt dit toepassingsdomein het systeemdomein als bovenliggend domein aan.
|
getDefinition | () | methode |
public function getDefinition(name:String):Object
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Haalt een publieke definitie uit het opgegeven toepassingsdomein op. Dat kan de definitie van een klasse, naamruimte of functie zijn.
Parameters
name:String — De naam van de definitie.
|
Object — Het object dat aan de definitie is gekoppeld.
|
Gegenereerde uitzondering
ReferenceError — Er bestaat geen publieke definitie met de opgegeven naam.
|
getQualifiedDefinitionNames | () | methode |
public function getQualifiedDefinitionNames():Vector.<String>
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.3, AIR 3.3 |
Hiermee worden alle volledig gekwalificeerde namen van openbare definities opgehaald uit het opgegeven toepassingsdomein. Dat kan de definitie van een klasse, naamruimte of functie zijn. De namen die door deze methode worden geretourneerd, kunnen worden doorgegeven aan de getDefinition()
-methode om het object van de werkelijke definitie op te halen.
De geretourneerde vector is van het type String, waarbij elke tekenreeks in de vorm: package voorkomt.path::definitionName
Als definitionName
voorkomt in de package van het bovenste niveau, dan wordt package.path::
weggelaten.
Bijvoorbeeld voor de volgende klassendefinitie:
package my.Example { public class SampleClass extends Sprite { } }
Deze methode retourneert "my.Example::SampleClass".
Geretourneerde waardeVector.<String> — Een niet-gesorteerde vector van tekenreeksen die staan voor de namen van de definities. Als er geen definitie is, is de vector leeg..<Tekenreeks> wordt geretourneerd.
|
Gegenereerde uitzondering
SecurityError — De definitie behoort tot een domein waartoe de aanroepende code geen toegang heeft.
|
hasDefinition | () | methode |
public function hasDefinition(name:String):Boolean
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Controleert of een publieke definitie bestaat binnen het opgegeven toepassingsdomein. Dat kan de definitie van een klasse, naamruimte of functie zijn.
Parameters
name:String — De naam van de definitie.
|
Boolean — De waarde true als de opgegeven definitie bestaat, andersfalse .
|
Opmerkingen:
- omdat de klasse ClassLoader een SWF-bestand laadt, moet de lokale beveiliging op bestandsysteemniveau worden ingesteld.
- Voor het uitvoeren van dit voorbeeld hebt u een SWF-bestand nodig met de naam RuntimeClasses.swf dat in dezelfde map staat als het bestand ApplicationDomainExample.swf.
Maak eerst het bestand RuntimeClasses.swf op basis van de volgende code:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
Implementeer vervolgens de volgende code:
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
te gebruiken. In dit geval wordt een nieuw ApplicationDomain
gemaakt, waardoor de eigenschappen en methoden van de klasse Greeter
van het SWF-bestand dat als tweede wordt geladen, de eigenschappen en methoden van de eerste klasse Greeter
niet zullen vervangen. U kunt dit testen door de eigenschap context.applicationDomain
in de methode load
van ClassLoader
aan te passen.
Opmerkingen:
- omdat de klasse ClassLoader een SWF-bestand laadt, moet de lokale beveiliging op bestandsysteemniveau worden ingesteld.
- Voor het uitvoeren van dit voorbeeld moet u twee SWF-bestanden hebben met de naam Greeter.swf die in de mappen 'en' en 'es' zijn opgeslagen.
Maak het bestand Greeter.as in de map 'en' met de volgende code:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Maak vervolgens een identiek bestand Greeter.as en sla dat op in de map 'es':
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Compileer SWF-bestanden voor beide bestanden en implementeer vervolgens de volgende code:
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)); } }
Wed Jun 13 2018, 11:42 AM Z