Paquete | flash.system |
Clase | public final class ApplicationDomain |
Herencia | ApplicationDomain Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Los dominios de aplicación se utilizan al cargar un archivo SWF externo mediante la clase Loader. Todas las definiciones de ActionScript 3.0 del archivo SWF cargado se guardan en el dominio de aplicación, que está especificado por la propiedad applicationDomain
del objeto LoaderContext transmitido como parámetro context
de los métodos load()
o loadBytes()
del objeto Loader. El objeto LoaderInfo también contiene una propiedad applicationDomain
de sólo lectura.
Todo el código de un archivo SWF se define para que exista en un dominio de aplicación. El dominio de aplicación actual es el lugar en el que se ejecuta la aplicación principal. El dominio del sistema contiene todos los dominios de la aplicación, incluido el dominio actual, lo que significa que contiene todas las clases de Flash Player.
Cada dominio de aplicación tiene asociado un dominio principal, excepto el dominio del sistema. El dominio principal del dominio de aplicación principal es el dominio del sistema. Sólo es necesario definir las clases cargadas si su clase principal no las ha definido todavía. No es posible anular una definición de clase cargada con otra definición más reciente.
Para consultar ejemplos de dominios de aplicación, consulte la Guía del desarrollador de ActionScript 3.0.
La función constructora ApplicationDomain()
permite crear un objeto ApplicationDomain.
Más ejemplos
Elementos de API relacionados
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Propiedad | Definido por | ||
---|---|---|---|
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
currentDomain : ApplicationDomain [estática] [solo lectura]
Obtiene el dominio de aplicación actual en el que se ejecuta el código. | ApplicationDomain | ||
domainMemory : ByteArray
Obtiene y establece el objeto en el que operarán las operaciones de memoria global de dominio de este ApplicationDomain. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [estática] [solo lectura]
Obtiene la longitud mínima de objeto de memoria requerida para utilizarse como ApplicationDomain.domainMemory. | ApplicationDomain | ||
parentDomain : ApplicationDomain [solo lectura]
Obtiene el dominio principal de este dominio de aplicación. | ApplicationDomain |
Método | Definido por | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Crea un nuevo dominio de aplicación. | ApplicationDomain | ||
Obtiene una definición pública del dominio de aplicación especificado. | ApplicationDomain | ||
Obtiene todos los nombres completos de las definiciones públicas del dominio de aplicación especificado. | ApplicationDomain | ||
Comprueba si existe una definición pública en el dominio de aplicación especificado. | ApplicationDomain | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
currentDomain | propiedad |
currentDomain:ApplicationDomain
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Obtiene el dominio de aplicación actual en el que se ejecuta el código.
Implementación
public static function get currentDomain():ApplicationDomain
domainMemory | propiedad |
domainMemory:ByteArray
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Obtiene y establece el objeto en el que operarán las operaciones de memoria global de dominio de este ApplicationDomain.
Implementación
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | propiedad |
MIN_DOMAIN_MEMORY_LENGTH:uint
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Obtiene la longitud mínima de objeto de memoria requerida para utilizarse como ApplicationDomain.domainMemory.
Implementación
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | propiedad |
parentDomain:ApplicationDomain
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Obtiene el dominio principal de este dominio de aplicación.
Implementación
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Información sobre |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Crea un nuevo dominio de aplicación.
ParámetrosparentDomain:ApplicationDomain (default = null ) — Si no se transmite ningún dominio principal, este dominio de aplicación considera el dominio del sistema como elemento principal.
|
getDefinition | () | método |
public function getDefinition(name:String):Object
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Obtiene una definición pública del dominio de aplicación especificado. La definición puede ser de una clase, de un espacio de nombres o de una función.
Parámetros
name:String — Nombre de la definición.
|
Object — Objeto asociado a la definición.
|
Emite
ReferenceError — No existe ninguna definición pública con el nombre especificado.
|
getQualifiedDefinitionNames | () | método |
public function getQualifiedDefinitionNames():Vector.<String>
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.3, AIR 3.3 |
Obtiene todos los nombres completos de las definiciones públicas del dominio de aplicación especificado. La definición puede ser de una clase, de un espacio de nombres o de una función. Los nombres devueltos por este método pueden transferirse al método getDefinition()
para obtener el objeto de la definición real.
El vector devuelto es de tipo String, y cada cadena tiene el formato: package.path::definitionName
Si definitionName
está en el paquete de nivel superior, package.path::
se omite.
Por ejemplo, en la siguiente definición de clase:
package my.Example { public class SampleClass extends Sprite { } }
Este método devuelve "my.Example::SampleClass".
Valor devueltoVector.<String> — Un vector de cadenas sin ordenar que representa los nombres de las definiciones. Si no hay ninguna definición, se devuelve un Vector.<String> vacío.
|
Emite
SecurityError — La definición pertenece a un dominio al que no tiene acceso el código que realiza la llamada.
|
hasDefinition | () | método |
public function hasDefinition(name:String):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Comprueba si existe una definición pública en el dominio de aplicación especificado. La definición puede ser de una clase, de un espacio de nombres o de una función.
Parámetros
name:String — Nombre de la definición.
|
Boolean — Devuelve un valor true si existe la definición especificada; en caso contrario, devuelve false .
|
Notas:
- debido a que la clase ClassLoader carga un archivo SWF, la seguridad local debe estar en el nivel del sistema de archivos.
- Para ejecutar este ejemplo, debe disponer de un archivo swf denominado RuntimeClasses.swf en la misma carpeta que el archivo ApplicationDomainExample.swf.
Comience creando el archivo RuntimeClasses.swf a partir del siguiente código:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
A continuación, implemente el siguiente código:
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
. En este caso, se crea un nuevo ApplicationDomain
, de modo que las propiedades y métodos de la clase Greeter
de cualquier archivo SWF que se cargue en segundo lugar no reemplacen las de la primera clase Greeter
. Para comprobar esto, modifique la propiedad context.applicationDomain
en el método load
deClassLoader
.
Notas:
- debido a que la clase ClassLoader carga un archivo SWF, la seguridad local debe estar en el nivel del sistema de archivos.
- Para ejecutar este ejemplo, debe contar con dos archivos SWF denominados Greeter.swf en las carpetas "en" y "es" respectivamente.
Cree un archivo Greeter.as en el directorio "en" con el siguiente código:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Después, cree un archivo Greeter.as muy similar en el directorio "es":
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Compile archivos SWF para ambos y, a continuación, implemente el siguiente código:
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, 02:12 PM Z