Paketflash.system
Klassepublic final class ApplicationDomain
VererbungApplicationDomain Inheritance Object

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

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 untergeordneten Klassen.

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 jeweils übergeordneten Klasse nicht bereits definiert sind. Die Definition einer geladenen Klasse kann nicht mit einer neueren Definition überschrieben werden.

Beispiele zur Verwendung von Anwendungsdomänen finden Sie im Handbuch Programmieren mit ActionScript 3.0.

Über die ApplicationDomain()-Konstruktorfunktion können Sie ein ApplicationDomain-Objekt erstellen.

Beispiele anzeigen

Siehe auch

flash.display.Loader.load()
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Verwenden der ApplicationDomain-Klasse


Öffentliche Eigenschaften
 EigenschaftDefiniert von
 Inheritedconstructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz.
Object
  currentDomain : ApplicationDomain
[static] [read-only] Ruft die aktuelle Anwendungsdomäne ab, in der der Code ausgeführt wird.
ApplicationDomain
  parentDomain : ApplicationDomain
[read-only] Ruft die übergeordnete Domäne der Anwendungsdomäne ab.
ApplicationDomain
 Inheritedprototype : Object
[static] Ein Verweis auf das Prototypobjekt einer Klasse oder eines Funktionsobjekts.
Object
Öffentliche Methoden
 MethodeDefiniert von
  
ApplicationDomain(parentDomain:ApplicationDomain = null)
Erstellt eine neue Anwendungsdomäne.
ApplicationDomain
  
Ruft eine öffentliche Definition von 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 das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
Eigenschaftsdetail
currentDomainEigenschaft
currentDomain:ApplicationDomain  [read-only]

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

Ruft die aktuelle Anwendungsdomäne ab, in der der Code ausgeführt wird.


Implementierung
    public static function get currentDomain():ApplicationDomain

Siehe auch

parentDomainEigenschaft 
parentDomain:ApplicationDomain  [read-only]

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

Ruft die übergeordnete Domäne der Anwendungsdomäne ab.


Implementierung
    public function get parentDomain():ApplicationDomain

Siehe auch

Konstruktordetail
ApplicationDomain()Konstruktor
public function ApplicationDomain(parentDomain:ApplicationDomain = null)

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

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.
Methodendetail
getDefinition()Methode
public function getDefinition(name:String):Object

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

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.
hasDefinition()Methode 
public function hasDefinition(name:String):Boolean

Sprachversion : ActionScript 3.0
Player-Version : Flash Player 9

Ü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.
Beispiele Verwendung von Beispielen
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:

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:

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));
    }
}




 

Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht

Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/system/ApplicationDomain.html