Packageflash.system
Classpublic final class ApplicationDomain
InheritanceApplicationDomain Inheritance Object

The ApplicationDomain class is a container for discrete groups of class definitions. Application domains are used to partition classes that are in the same security domain. They allow multiple definitions of the same class to exist and allow children to reuse parent definitions.

Application domains are used when an external SWF file is loaded through the Loader class. All ActionScript 3.0 definitions in the loaded SWF are stored in the application domain, which is specified by the applicationDomain property of the LoaderContext object that you pass as a context parameter of the load() or loadBytes() method of a Loader object. The LoaderInfo object also contains an applicationDomain property, which is read-only.

All code in a SWF file is defined to exist in an application domain. The current application domain is where your main application runs. The system domain contains all application domains, including the current domain, which means that it contains all Flash Player classes.

Every application domain, except the system domain, has an associated parent domain. The parent domain of your main application's application domain is the system domain. Loaded classes are defined only when their parent doesn't already define them. You cannot override a loaded class definition with a newer definition.

For usage examples of application domains, see Programming ActionScript 3.0.

The ApplicationDomain() constructor function allows you to create an ApplicationDomain object.

View the examples.

See also
flash.display.Loader.load(), flash.display.Loader.loadBytes(), flash.system.LoaderContext, flash.display.LoaderInfo, flash.net.URLRequest


Public Properties
Hide Inherited Public Properties
Show Inherited Public Properties
 PropertyDefined by
 Inheritedconstructor : Object
A reference to the class object or constructor function for a given object instance.
Object
  currentDomain : ApplicationDomain
[static][read-only] Gets the current application domain in which your code is executing.
ApplicationDomain
  parentDomain : ApplicationDomain
[read-only] Gets the parent domain of this application domain.
ApplicationDomain
 Inheritedprototype : Object
[static] A reference to the prototype object of a class or function object.
Object
Public Methods
Hide Inherited Public Methods
Show Inherited Public Methods
 FunctionDefined by
  
ApplicationDomain(parentDomain:ApplicationDomain = null)
Creates a new application domain.
ApplicationDomain
  
Gets a public definition from the specified application domain.
ApplicationDomain
 Inherited
Indicates whether an object has a specified property defined.
Object
 Inherited
Indicates whether an instance of the Object class is in the prototype chain of the object specified as the parameter.
Object
 Inherited
Indicates whether the specified property exists and is enumerable.
Object
 Inherited
Sets the availability of a dynamic property for loop operations.
Object
 Inherited
Returns the string representation of the specified object.
Object
 Inherited
Returns the primitive value of the specified object.
Object
Property detail
currentDomain property
currentDomain:ApplicationDomain  [read-only]

Gets the current application domain in which your code is executing.

Implementation
    public static function get currentDomain():ApplicationDomain
parentDomain property
parentDomain:ApplicationDomain  [read-only]

Gets the parent domain of this application domain.

Implementation
    public function get parentDomain():ApplicationDomain
Constructor detail
ApplicationDomain constructor

public function ApplicationDomain(parentDomain:ApplicationDomain = null)

Creates a new application domain.

Parameters
parentDomain:ApplicationDomain (default = null) — If no parent domain is passed in, this application domain takes the system domain as its parent.
Method detail
getDefinition method

public function getDefinition(name:String):Object

Gets a public definition from the specified application domain. The definition obtained can be of a class, a namespace, or a function.

Parameters
name:String — The name of the definition.

Returns
Object — The object associated with the definition.

Throws
ReferenceError — No public definition exists with the specified name.
Class examples

The following example demonstrates runtime class loading. It has the following dependencies:


package {
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.errors.IllegalOperationError;
    import flash.events.Event;

    public class ApplicationDomainExample extends Sprite {
        private var loader:ClassLoader;
        
        public function ApplicationDomainExample() {
            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 {
            throw new IllegalOperationError(e);
        }
        
        private function classLoadedHandler(e:Event):void {
            var greeterClassRef:Class = loader.getClass("Greeter");
            var greeter:Object = new greeterClassRef();
            trace(greeter.greet()); // Hello World
            
            greeterClassRef = loader.getClass("VisualGreeter");
            greeter = new greeterClassRef();
            addChild(DisplayObject(greeter));
            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);
        }
        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));
    }
}




 

Send me an e-mail when comments are added to this page | Comment Report

Current page: http://livedocs.adobe.com/labs/flashauthoringpreview/flash/system/ApplicationDomain.html