Paqueteflash.system
Clasepublic final class ApplicationDomain
HerenciaApplicationDomain Inheritance Object

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

La clase ApplicationDomain es un contenedor para grupos discretos de definiciones de clases. Los dominios de aplicación se utilizan para hacer particiones de clases en el mismo dominio de seguridad. Se permiten varias definiciones de la misma clase y que los elementos secundarios puedan reutilizar definiciones de elementos principales.

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 ver ejemplos de uso de dominios de aplicación, consulte Programación con ActionScript 3.0.

La función constructora ApplicationDomain() permite crear un objeto ApplicationDomain.

Ver los ejemplos

Véase también

flash.display.Loader.load()
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Utilización de la clase ApplicationDomain


Propiedades públicas
 PropiedadDefinido por
 Inheritedconstructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada.
Object
  currentDomain : ApplicationDomain
[static] [read-only] Obtiene el dominio de aplicación actual en el que se ejecuta el código.
ApplicationDomain
  parentDomain : ApplicationDomain
[read-only] Obtiene el dominio principal de este dominio de aplicación.
ApplicationDomain
 Inheritedprototype : Object
[static] Una referencia al objeto prototipo de una clase u objeto de función.
Object
Métodos públicos
 MétodoDefinido 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
  
Comprueba si existe una definición pública en el dominio de aplicación especificado.
ApplicationDomain
 Inherited
Indica si un objeto tiene definida una propiedad especificada.
Object
 Inherited
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro.
Object
 Inherited
Indica si existe la propiedad especificada y si es enumerable.
Object
 Inherited
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle.
Object
 Inherited
Devuelve la representación de cadena del objeto especificado.
Object
 Inherited
Devuelve el valor simple del objeto especificado.
Object
Información sobre propiedades
currentDomainpropiedad
currentDomain:ApplicationDomain  [read-only]

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

Obtiene el dominio de aplicación actual en el que se ejecuta el código.


Implementación
    public static function get currentDomain():ApplicationDomain

Véase también

parentDomainpropiedad 
parentDomain:ApplicationDomain  [read-only]

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

Obtiene el dominio principal de este dominio de aplicación.


Implementación
    public function get parentDomain():ApplicationDomain

Véase también

Información sobre constructores
ApplicationDomain()constructor
public function ApplicationDomain(parentDomain:ApplicationDomain = null)

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

Crea un nuevo dominio de aplicación.

Parámetros
parentDomain:ApplicationDomain (default = null) — Si no se transmite ningún dominio principal, este dominio de aplicación considera el dominio del sistema como elemento principal.
Información sobre métodos
getDefinition()método
public function getDefinition(name:String):Object

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

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.

Valor devuelto
Object — Objeto asociado a la definición.

Emite
ReferenceError — No existe ninguna definición pública con el nombre especificado.
hasDefinition()método 
public function hasDefinition(name:String):Boolean

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

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.

Valor devuelto
Boolean — Devuelve un valor true si existe la definición especificada; en caso contrario, devuelve false.
Ejemplos Cómo utilizar los ejemplos
ApplicationDomainExample.as

En el ejemplo siguiente, se muestra la carga de clases en tiempo de ejecución y cómo llamar a métodos públicos de una clase que residen en otro archivo SWF.

Notas:

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

Si varios archivos SWF contienen clases compiladas con el mismo nombre pero ofrecen una implementación diferente, puede hacer particiones de las clases de archivos SWF cargados externamente independientemente de las clases de cada uno, siguiendo este ejemplo. Previamente se indicó que el archivo SWF secundario utilizara 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:

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




 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/system/ApplicationDomain.html