ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
Home  |  Liste der Pakete und Klassen ausblenden |  Pakete  |  Klassen  |  Neue Funktionen  |  Stichwortverzeichnis  |  Anhänge  |  Warum auf Englisch?
Filter: Daten werden vom Server abgerufen...
Daten werden vom Server abgerufen...
flash.system 

ApplicationDomain  - AS3

Paketflash.system
Klassepublic final class ApplicationDomain
VererbungApplicationDomain Inheritance Object

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 1.0, Flash Player 9, Flash Lite 4

Die ApplicationDomain-Klasse ist ein Container für diskrete Gruppen mit Klassendefinitionen. Mit Anwendungsdomänen werden Klassen unterteilt, die sich in der gleichen Sicherheitsdomäne befinden. Dies ermöglicht mehrere Definitionen der gleichen Klasse und die Wiederverwendung übergeordneter Definitionen in Unterklassen.

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.

Beispiele anzeigen

Verwandte API-Elemente



Öffentliche Eigenschaften
 EigenschaftDefiniert von
 Inheritedconstructor : 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
Öffentliche Methoden
 MethodeDefiniert von
  
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
 Inherited
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde.
Object
 Inherited
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde.
Object
 Inherited
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann.
Object
 Inherited
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest.
Object
 Inherited
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Object
 Inherited
Gibt das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
Eigenschaftendetails

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
Konstruktordetails

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.

Parameter
parentDomain:ApplicationDomain (default = null) — Wenn keine übergeordnete Domäne übergeben wird, wird dieser Anwendungsdomäne die Systemdomäne als übergeordnete Domäne zugeordnet.
Methodendetails

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.

Rückgabewerte
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ückgabewerte
Vector.<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.

Rückgabewerte
Boolean — Der Wert true, wenn die angegebene Definition vorhanden ist, andernfalls false.
ApplicationDomainExample.as

Das folgende Beispiel veranschaulicht, wie Klassen zur Laufzeit geladen und öffentliche Methoden, die sich in einer anderen SWF-Datei befinden, aufgerufen werden.

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));
    }
}
ApplicationDomainExample.2.as

Wenn mehrere SWF-Dateien kompilierte Klassen mit demselben Namen enthalten, die jedoch unterschiedliche Implementierungen bieten, können Sie die Klassen der extern geladenen SWF-Dateien anhand des folgenden Beispiels getrennt von anderen Klassen speichern. Bisher wurde die untergeordnete SWF-Datei angewiesen, 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));
    }
}




[ X ]Warum auf Englisch?
Inhalt des ActionScript 3.0-Referenzhandbuchs wird in englischer Sprache angezeigt

Nicht alle Teile des ActionScript 3.0-Referenzhandbuchs wurden in alle Sprachen übersetzt. Wenn der Text zu einem Sprachelement nicht übersetzt wurde, wird er auf Englisch angezeigt. Zum Beispiel wurden die Informationen zur ga.controls.HelpBox-Klasse nicht in andere Sprachen übersetzt. In der deutschen Version des Referenzhandbuchs erscheint der Abschnitt zur ga.controls.HelpBox-Klasse deshalb auf Englisch.