Package | flash.system |
Classe | public final class ApplicationDomain |
Héritage | ApplicationDomain Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
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 d’utilisation de domaines d’application, voir le Guide du développeur d’ActionScript 3.0.
La fonction constructeur ApplicationDomain()
permet de créer un objet ApplicationDomain.
Plus d’exemples
Eléments de l’API associés
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Propriété | Défini par | ||
---|---|---|---|
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
currentDomain : ApplicationDomain [statique] [lecture seule]
Extrait le domaine d’application actuel où le code est en cours d’exécution. | ApplicationDomain | ||
domainMemory : ByteArray
Extrait et définit l’objet sur lequel les opérations de mémoire s’appliquent pour tout le domaine au sein de ce ApplicationDomain. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statique] [lecture seule]
Extrait la longueur minimale de l’objet de mémoire qui doit être utilisée comme ApplicationDomain.domainMemory. | ApplicationDomain | ||
parentDomain : ApplicationDomain [lecture seule]
Définit le domaine parent de ce domaine d’application. | ApplicationDomain |
Méthode | Dé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 | ||
Récupère tous les noms qualifiés complets de définitions publiques du domaine d’application spécifié. | ApplicationDomain | ||
Vérifie si une définition publique existe au sein du domaine d’application spécifié. | ApplicationDomain | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
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 | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
currentDomain | propriété |
currentDomain:ApplicationDomain
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Extrait le domaine d’application actuel où le code est en cours d’exécution.
Implémentation
public static function get currentDomain():ApplicationDomain
Plus d’exemples
domainMemory | propriété |
domainMemory:ByteArray
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Extrait et définit l’objet sur lequel les opérations de mémoire s’appliquent pour tout le domaine au sein de ce ApplicationDomain.
Implémentation
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | propriété |
MIN_DOMAIN_MEMORY_LENGTH:uint
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Extrait la longueur minimale de l’objet de mémoire qui doit être utilisée comme ApplicationDomain.domainMemory.
Implémentation
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | propriété |
parentDomain:ApplicationDomain
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Définit le domaine parent de ce domaine d’application.
Implémentation
public function get parentDomain():ApplicationDomain
Plus d’exemples
ApplicationDomain | () | Constructeur |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Crée un domaine d’application.
ParamètresparentDomain:ApplicationDomain (default = null ) — Si aucun domaine parent n’est transmis, ce domaine d’application prend le domaine système en tant que parent.
|
getDefinition | () | méthode |
public function getDefinition(name:String):Object
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
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.
|
Object — Objet associé à la définition.
|
Valeur émise
ReferenceError — Aucune définition publique n’existe sous le nom spécifié.
|
getQualifiedDefinitionNames | () | méthode |
public function getQualifiedDefinitionNames():Vector.<String>
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11.3, AIR 3.3 |
Récupère tous les noms qualifiés complets de définitions publiques du domaine d’application spécifié. La définition peut appartenir à une classe, un nom d’espace ou une fonction. Les noms renvoyés par cette méthode peut être transmis à la méthode getDefinition()
pour obtenir l’objet de la définition actuelle.
Le vecteur renvoyé est de type String, où chaque chaîne est sous la forme : package.path::definitionName
Si definitionName
se trouve dans le package de niveau supérieur, package.path::
est omis.
Par exemple, pour la classe de définition suivante :
package my.Example { public class SampleClass extends Sprite { } }
Cette méthode renvoie "my.Example::SampleClass".
Valeur renvoyéeVector.<String> — Vecteur de chaînes non trié qui représentent les noms des définitions. S’il n’existe aucune définition, un vecteur vide.<String> est renvoyé.
|
Valeur émise
SecurityError — La définition appartient à un domaine auquel le code effectuant l’appel n’a pas accès.
|
hasDefinition | () | méthode |
public function hasDefinition(name:String):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9, Flash Lite 4 |
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.
|
Boolean — Valeur true si la définition spécifiée existe, false dans le cas contraire.
|
Remarques :
- Dans la mesure où la classe ClassLoader charge un fichier SWF, la sécurité locale doit porter au niveau du système de fichiers.
- Pour exécuter cet exemple, vous devez disposer d’un fichier swf appelé RuntimeClasses.swf et présent dans le même dossier que le fichier ApplicationDomainExample.swf.
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)); } }
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 :
- Dans la mesure où la classe ClassLoader charge un fichier SWF, la sécurité locale doit porter au niveau du système de fichiers.
- Pour exécuter cet exemple, vous devez disposer de deux fichiers SWF appelés Greeter.swf et présents dans les dossiers « en » et « es ».
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)); } }
Tue Jun 12 2018, 09:30 AM Z