Packageflash.system
Classepublic final class ApplicationDomain
HéritageApplicationDomain Inheritance Object

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

La classe ApplicationDomain est un conteneur pour les groupes discrets de définitions de classes. Les domaines d'application sont utilisés pour créer des partitions entre les classes qui appartiennent au même domaine de sécurité. Ils autorisent des définitions multiples de la même classe et permettent aux enfants de recycler les définitions des parents.

Les domaines d'application sont utilisés lorsqu'un fichier SWF externe est chargé à l'aide de la classe Loader. Toutes les définitions ActionScript 3.0 du fichier SWF chargé sont stockées dans le domaine d'application, qui est spécifié par la propriété applicationDomain de l'objet LoaderContext que vous transmettez en tant que paramètre context de la méthode load() ou loadBytes() de l'objet Loader. L'objet LoaderInfo contient également une propriété applicationDomain en lecture seule.

L’ensemble du code d’un fichier SWF est défini de sorte à exister dans un domaine d’application. Votre application principale s’exécute dans le domaine d’application en cours. Le domaine du système contient tous les domaines d’application, y compris le domaine en cours ; il contient donc toutes les classes Flash Player.

A l’exception du domaine du système, tous les domaines d’application sont associés à un domaine du parent. Le domaine parent du domaine d'application de votre application principale est le domaine système. Les classes chargées ne sont définies que si leur parent ne les définit pas encore. Vous ne pouvez pas remplacer une définition de classe chargée par une définition plus récente.

Pour obtenir des exemples de domaines d'application, consultez le guide Programmation d'ActionScript 3.0.

La fonction constructeur ApplicationDomain() permet de créer un objet ApplicationDomain.

Consulter les exemples

Voir aussi

flash.display.Loader.load()
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Utilisation de la classe ApplicationDomain


Propriétés publiques
 PropriétéDéfini par
 Inheritedconstructor : Object
Référence à l'objet de classe ou à la fonction constructeur d'une occurrence donnée d'un objet.
Object
  currentDomain : ApplicationDomain
[static] [lecture-seule] Extrait le domaine d'application actuel où le code est en cours d'exécution.
ApplicationDomain
  parentDomain : ApplicationDomain
[lecture-seule] Définit le domaine parent de ce domaine d'application.
ApplicationDomain
 Inheritedprototype : Object
[static] Référence à l’objet prototype d’un objet de classe ou fonction.
Object
Méthodes publiques
 MéthodeDéfini par
  
ApplicationDomain(parentDomain:ApplicationDomain = null)
Crée un domaine d'application.
ApplicationDomain
  
Extrait une définition publique du domaine d'application spécifié.
ApplicationDomain
  
Vérifie si une définition publique existe au sein du domaine d'application spécifié.
ApplicationDomain
 Inherited
Indique si la propriété spécifiée d'un objet est définie.
Object
 Inherited
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l'objet spécifié en tant que paramètre.
Object
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
 Inherited
Définit la disponibilité d'une propriété dynamique pour les opérations en boucle.
Object
 Inherited
Renvoie la représentation sous forme de chaîne de l'objet spécifié.
Object
 Inherited
Renvoie la valeur primitive de l'objet spécifié.
Object
Détails des propriétés
currentDomainpropriété
currentDomain:ApplicationDomain  [lecture-seule]

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

Extrait le domaine d'application actuel où le code est en cours d'exécution.


Implémentation
    public static function get currentDomain():ApplicationDomain

Voir aussi

parentDomainpropriété 
parentDomain:ApplicationDomain  [lecture-seule]

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

Définit le domaine parent de ce domaine d'application.


Implémentation
    public function get parentDomain():ApplicationDomain

Voir aussi

Détails du constructeur
ApplicationDomain()Constructeur
public function ApplicationDomain(parentDomain:ApplicationDomain = null)

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

Crée un domaine d'application.

Paramètres
parentDomain:ApplicationDomain (default = null) — Si aucun domaine parent n'est transmis, ce domaine d'application prend le domaine système en tant que parent.
Détails des méthodes
getDefinition()méthode
public function getDefinition(name:String):Object

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

Extrait une définition publique du domaine d'application spécifié. La définition peut appartenir à une classe, un nom d'espace ou une fonction.

Paramètres

name:String — Le nom de la définition.

Valeur renvoyée
Object — Objet associé à la définition.

Lance
ReferenceError — Aucune définition publique n'existe sous le nom spécifié.
hasDefinition()méthode 
public function hasDefinition(name:String):Boolean

Version du langage : ActionScript 3.0
Version du lecteur : Flash Player 9

Vérifie si une définition publique existe au sein du domaine d'application spécifié. La définition peut appartenir à une classe, un nom d'espace ou une fonction.

Paramètres

name:String — Le nom de la définition.

Valeur renvoyée
Boolean — Valeur true si la définition spécifiée existe, false dans le cas contraire.
Exemples Utilisation des exemples
ApplicationDomainExample.as

L'exemple suivant démontre le chargement de la classe pendant la période d'exécution, ainsi que les différentes façons d'appeler les méthodes publiques d'une classe qui réside dans un autre fichier SWF.

Remarques :

Commencez par créer le fichier RuntimeClasses.swf à partir du code suivant :

 package {
    import flash.display.Sprite;

    public class RuntimeClasses extends Sprite
    {
        public function RuntimeClasses()
        {
        }
        
        public function greet():String {
            return("Hello World");
        }
    }
}

 

Mettez ensuite en œuvre le code suivant :


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

Si plusieurs fichiers SWF contiennent des classes compilées sous le même nom, mais avec des mises en œuvre différentes, vous pouvez séparer les classes des fichiers SWF chargés de façon externe comme indiqué dans l'exemple suivant. Précédemment, le fichier SWF enfant devait utiliser ApplicationDomain.currentDomain. Dans ce cas, un nouvel objet ApplicationDomain est créé, de façon à ce que les propriétés et les méthodes de la classe Greeter qui sont chargées en deuxième ne remplacent pas les propriétés et les méthodes de la première classe Greeter. Vous pouvez tester ceci en modifiant la propriété context.applicationDomain de la méthode load de ClassLoader.

Remarques :

Créez un fichier Greeter.as dans le répertoire « en » avec le code suivant :

 package {
    import flash.display.Sprite;

    public class Greeter extends Sprite
    {
        public function Greeter()
        {
        }
        
        public function greet():String {
            return("Good Morning");
        }
    }
}
 

Créez ensuite un fichier Greeter.as similaire dans le répertoire « es » :

 package {
    import flash.display.Sprite;

    public class Greeter extends Sprite
    {
        public function Greeter()
        {
        }
        
        public function greet():String {
            return("Buenos Dias");
        }
    }
}

 

Compilez les fichiers SWF de ces deux dossiers, puis mettez en œuvre le code suivant :

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




 

M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire

Page en cours: http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/flash/system/ApplicationDomain.html