Paket | flash.system |
Klasse | public final class ApplicationDomain |
Vererbung | ApplicationDomain Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Anwendungsdomänen werden beim Laden einer externen SWF-Datei über die Loader-Klasse verwendet. Alle ActionScript 3.0-Definitionen in der geladenen SWF-Datei sind in der Anwendungsdomäne gespeichert, die durch die applicationDomain
-Eigenschaft des LoaderContext-Objekts angegeben wird, das als context
-Parameter der load()
- oder loadBytes()
-Methode des Loader-Objekts übergeben wird. Das LoaderInfo-Objekt enthält auch eine schreibgeschützte applicationDomain
-Eigenschaft.
Der gesamte Code in einer SWF-Datei ist so definiert, dass er sich in einer Anwendungsdomäne befindet. Die aktuelle Anwendungsdomäne ist die Domäne, in der die Hauptanwendung ausgeführt wird. Die Systemdomäne enthält alle Anwendungsdomänen, einschließlich der aktuellen Domäne, d. h. alle Klassen von Flash Player.
Mit Ausnahme der Systemdomäne ist jede Anwendungsdomäne mit einer übergeordneten Domäne verknüpft. Die Systemdomäne ist die übergeordnete Domäne der Anwendungsdomäne der Hauptanwendung. Geladene Klassen werden nur definiert, wenn sie in der jeweiligen Superklasse nicht bereits definiert sind. Die Definition einer geladenen Klasse kann nicht mit einer neueren Definition überschrieben werden.
Verwendungsbeispiele für Anwendungsdomänen finden Sie im ActionScript 3.0 Entwicklerhandbuch.
Über die ApplicationDomain()
-Konstruktorfunktion können Sie ein ApplicationDomain-Objekt erstellen.
Verwandte API-Elemente
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Eigenschaft | Definiert von | ||
---|---|---|---|
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
currentDomain : ApplicationDomain [statisch] [schreibgeschützt]
Ruft die aktuelle Anwendungsdomäne ab, in der der Code ausgeführt wird. | ApplicationDomain | ||
domainMemory : ByteArray
Ruft das Objekt ab und stellt es ein, für welches Cross-Domain-Speichervorgänge innerhalb dieser ApplicationDomain stattfinden. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statisch] [schreibgeschützt]
Ruft die erforderliche Mindestlänge des Speicherobjekts ab, das als ApplicationDomain.domainMemory verwendet wird. | ApplicationDomain | ||
parentDomain : ApplicationDomain [schreibgeschützt]
Ruft die übergeordnete Domäne der Anwendungsdomäne ab. | ApplicationDomain |
Methode | Definiert von | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Erstellt eine neue Anwendungsdomäne. | ApplicationDomain | ||
Ruft eine öffentliche Definition von der angegebenen Anwendungsdomäne ab. | ApplicationDomain | ||
Ruft alle vollständig qualifizierten Namen öffentlicher Definitionen aus der angegebenen Anwendungsdomäne ab. | ApplicationDomain | ||
Überprüft, ob in der angegebenen Anwendungsdomäne eine öffentliche Definition vorhanden ist. | ApplicationDomain | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
currentDomain | Eigenschaft |
currentDomain:ApplicationDomain
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Ruft die aktuelle Anwendungsdomäne ab, in der der Code ausgeführt wird.
Implementierung
public static function get currentDomain():ApplicationDomain
domainMemory | Eigenschaft |
domainMemory:ByteArray
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Ruft das Objekt ab und stellt es ein, für welches Cross-Domain-Speichervorgänge innerhalb dieser ApplicationDomain stattfinden.
Implementierung
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | Eigenschaft |
MIN_DOMAIN_MEMORY_LENGTH:uint
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Ruft die erforderliche Mindestlänge des Speicherobjekts ab, das als ApplicationDomain.domainMemory verwendet wird.
Implementierung
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | Eigenschaft |
parentDomain:ApplicationDomain
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Ruft die übergeordnete Domäne der Anwendungsdomäne ab.
Implementierung
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Konstruktor |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Erstellt eine neue Anwendungsdomäne.
ParameterparentDomain:ApplicationDomain (default = null ) — Wenn keine übergeordnete Domäne übergeben wird, wird dieser Anwendungsdomäne die Systemdomäne als übergeordnete Domäne zugeordnet.
|
getDefinition | () | Methode |
public function getDefinition(name:String):Object
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Ruft eine öffentliche Definition von der angegebenen Anwendungsdomäne ab. Dabei kann es sich um die Definition einer Klasse, eines Namespace oder einer Funktion handeln.
Parameter
name:String — Der Name der Definition.
|
Object — Das mit der Definition verknüpfte Objekt.
|
Auslöser
ReferenceError — Es ist keine öffentliche Definition mit dem angegebenen Namen vorhanden.
|
getQualifiedDefinitionNames | () | Methode |
public function getQualifiedDefinitionNames():Vector.<String>
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.3, AIR 3.3 |
Ruft alle vollständig qualifizierten Namen öffentlicher Definitionen aus der angegebenen Anwendungsdomäne ab. Dabei kann es sich um die Definition einer Klasse, eines Namespace oder einer Funktion handeln. Die von dieser Methode zurückgegebenen Namen kann an die getDefinition()
-Methode übergeben werden, um das Objekt der eigentlichen Definition abzurufen.
Der zurückgegebene Vektor ist vom Typ String, wobei jeder String in der folgenden Form vorliegt: package.path::definitionName
Wenn sich definitionName
im Paket der obersten Ebene befindet, wird package.path::
ausgelassen.
Für die folgende Klassendefinition:
package my.Example { public class SampleClass extends Sprite { } }
gibt diese Methode „my.Example::SampleClass“ zurück.
RückgabewerteVector.<String> — Ein nicht sortierter Vektor mit Strings, die die Namen der Definitionen darstellen. Wenn keine Definition vorhanden ist, ein leerer Vektor.<String> wird zurückgegeben.
|
Auslöser
SecurityError — Die Definition ist Teil einer Domäne, auf die der aufrufende Programmcode keinen Zugriff hat.
|
hasDefinition | () | Methode |
public function hasDefinition(name:String):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Überprüft, ob in der angegebenen Anwendungsdomäne eine öffentliche Definition vorhanden ist. Dabei kann es sich um die Definition einer Klasse, eines Namespace oder einer Funktion handeln.
Parameter
name:String — Der Name der Definition.
|
Boolean — Der Wert true , wenn die angegebene Definition vorhanden ist, andernfalls false .
|
Hinweise:
- Da eine SWF-Datei von der ClassLoader-Klasse geladen wird, muss die lokale Sicherheit die Dateisystemebene erfassen.
- Um dieses Beispiel auszuführen, müssen Sie über eine swf-Datei mit dem Namen „RuntimeClasses.swf“ verfügen, die sich im gleichen Ordner befindet wie „ApplicationDomainExample.swf“.
Erstellen Sie zunächst die Datei „RuntimeClasses.swf“ mithilfe des folgenden Codes:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
Implementieren Sie dann den folgenden 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
zu verwenden. In diesem Fall wurde eine neue ApplicationDomain
erstellt, sodass die Eigenschaften und Methoden der Greeter
-Klasse der SWF-Datei, die als zweite geladen wird, nicht die Eigenschaften und Methoden der ersten Greeter
-Klasse ersetzen. Sie können dies testen, indem Sie die context.applicationDomain
-Eigenschaft in der load
-Methode von ClassLoader
ändern.
Hinweise:
- Da eine SWF-Datei von der ClassLoader-Klasse geladen wird, muss die lokale Sicherheit die Dateisystemebene erfassen.
- Um dieses Beispiel auszuführen, müssen Sie über zwei SWF-Dateien mit dem Namen „Greeter.swf“ verfügen, die im Ordner „en“ bzw. „es“ gespeichert sind.
Erstellen Sie im Ordner „en“ eine Datei mit dem Namen „Greeter.as“ mit dem folgenden Code:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Erstellen Sie dann eine sehr ähnliche „Greeter.as“-Datei im Ordner „es“:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Kompilieren Sie SWF-Dateien für beide und implementieren Sie dann den folgenden 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)); } }
Tue Jun 12 2018, 10:04 AM Z