適用於 Adobe® Flash® Platform 的 ActionScript® 3.0 參考
首頁  |  隱藏套件和類別清單 |  套件  |  類別  |  新增內容  |  索引  |  附錄  |  為什麼顯示英文?
篩選: 從伺服器擷取資料...
從伺服器擷取資料...
flash.system 

ApplicationDomain  - AS3

套件flash.system
類別public final class ApplicationDomain
繼承ApplicationDomain Inheritance Object

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

ApplicationDomain 類別是分離之類別定義群組的容器。 應用程式網域的用途為分割位於相同安全性網域中的類別。 這些網域能允許相同的類別具有多項定義,並允許其子系重新使用父輩定義。

應用程式網域會在透過 Loader 類別載入外部 SWF 檔時使用。 位於載入之 SWF 檔中使用的所有 ActionScript 3.0 定義,都會儲存在應用程式網域中,該網域則由 LoaderContext 物件 (會傳遞作為 Loader 物件之 load()loadBytes() 方法的 context 參數) 的 applicationDomain 屬性所指定。 LoaderInfo 物件也含有唯讀的 applicationDomain 屬性。

SWF 檔中的所有程式碼,都是為了存在於應用程式網域中而定義。 目前的應用程式網域也就是您的主應用程式的執行位置。 系統網域包含所有的應用程式網域 (其中也包括目前的網域),這表示其中含有所有的 Flash Player 類別。

每個應用程式網域 (除了系統網域以外) 都具有相關聯的父網域。 您的主應用程式之應用程式網域的父網域,就是系統網域。 只有在其父輩尚未定義載入的類別時,這些類別才會獲得定義。 因此,您不能以較新的定義覆寫載入類別的定義。

有關應用程式網域的使用範例,請參閱「ActionScript 3.0 開發人員指南」

ApplicationDomain() 建構函數能讓您建立 ApplicationDomain 物件。

檢視範例

更多範例

相關 API 元素



公用屬性
 屬性定義自
 Inheritedconstructor : Object
類別物件的參照或是特定物件實體的建構函數。
Object
  currentDomain : ApplicationDomain
[靜態] [唯讀] 會取得您的程式碼正在其中執行的目前應用程式網域。
ApplicationDomain
  domainMemory : ByteArray
取得並設定網域全域記憶體作業將在此 ApplicationDomain 中作業的物件。
ApplicationDomain
  MIN_DOMAIN_MEMORY_LENGTH : uint
[靜態] [唯讀] 取得用做 ApplicationDomain.domainMemory 所需的最小記憶體物件長度。
ApplicationDomain
  parentDomain : ApplicationDomain
[唯讀] 會取得此應用程式網域的父網域。
ApplicationDomain
公用方法
 方法定義自
  
會建立新的應用程式網域。
ApplicationDomain
  
會從指定的應用程式網域取得公用定義。
ApplicationDomain
  
會從指定的應用程式網域取得公用定義的所有完整名稱。
ApplicationDomain
  
會檢查公用定義是否存在於指定之應用程式網域。
ApplicationDomain
 Inherited
指出物件是否有已定義的指定屬性。
Object
 Inherited
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
Object
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
 Inherited
傳回代表此物件的字串,根據地區特定慣例進行格式化。
Object
 Inherited
會傳回指定之物件的字串形式。
Object
 Inherited
會傳回指定之物件的基本值。
Object
屬性詳細資訊

currentDomain

屬性
currentDomain:ApplicationDomain  [唯讀]

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

會取得您的程式碼正在其中執行的目前應用程式網域。



實作
    public static function get currentDomain():ApplicationDomain

domainMemory

屬性 
domainMemory:ByteArray

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5, Flash Lite 4

取得並設定網域全域記憶體作業將在此 ApplicationDomain 中作業的物件。



實作
    public function get domainMemory():ByteArray
    public function set domainMemory(value:ByteArray):void

MIN_DOMAIN_MEMORY_LENGTH

屬性 
MIN_DOMAIN_MEMORY_LENGTH:uint  [唯讀]

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5, Flash Lite 4

取得用做 ApplicationDomain.domainMemory 所需的最小記憶體物件長度。



實作
    public static function get MIN_DOMAIN_MEMORY_LENGTH():uint

parentDomain

屬性 
parentDomain:ApplicationDomain  [唯讀]

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

會取得此應用程式網域的父網域。



實作
    public function get parentDomain():ApplicationDomain
建構函式詳細資料

ApplicationDomain

()建構函式
public function ApplicationDomain(parentDomain:ApplicationDomain = null)

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

會建立新的應用程式網域。

參數
parentDomain:ApplicationDomain (default = null) — 如果沒有傳入父網域,這個應用程式網域便會將系統網域當做父輩。
方法詳細資訊

getDefinition

()方法
public function getDefinition(name:String):Object

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

會從指定的應用程式網域取得公用定義。 定義可以是類別、名稱空間或函數的定義。

參數

name:String — 定義的名稱。

傳回值
Object — 與定義相關聯的物件。

擲回值
ReferenceError — 具有指定之名稱的公用定義不存在。

getQualifiedDefinitionNames

()方法 
public function getQualifiedDefinitionNames():Vector.<String>

語言版本: ActionScript 3.0
執行階段版本: Flash Player 11.3, AIR 3.3

會從指定的應用程式網域取得公用定義的所有完整名稱。定義可以是類別、名稱空間或函數的定義。從這個方法傳回的名稱可傳遞至 getDefinition() 方法,以取得實際定義的物件。

傳回的 Vector 屬於 String 類型,而每個 String 的格式為:package.path::definitionName

如果 definitionName 在最上層套件中,則會忽略 package.path::

以下列類別定義為列:

     package my.Example
     {
       public class SampleClass extends Sprite
       { }
     }

這個方法會傳回「my.Example::SampleClass」。

傳回值
Vector.<String> — 屬於定義名稱之字串的未排序 Vector。如果沒有定義,則為空的 Vector。傳回 <String>。

擲回值
SecurityError — 這個定義屬於呼叫程式碼無法存取的網域。

hasDefinition

()方法 
public function hasDefinition(name:String):Boolean

語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9, Flash Lite 4

會檢查公用定義是否存在於指定之應用程式網域。 定義可以是類別、名稱空間或函數的定義。

參數

name:String — 定義的名稱。

傳回值
Boolean — 如果指定的定義存在,則值為 true;否則為 false
ApplicationDomainExample.as

下列範例將示範執行階段類別的載入作業,以及如何呼叫位於其它 SWF 中的類別之公用方法。

注意:

  • 由於 ClassLoader 類別會載入 SWF 檔,所以本機安全性必須處於檔案系統層級。
  • 若要執行此範例,則 ApplicationDomainExample.swf 檔案所在的資料夾中必須有名為 RuntimeClasses.swf 的 SWF 檔。

請先從下列程式碼中建立 RuntimeClasses.swf 檔案:

 package {
   import flash.display.Sprite;
   public class RuntimeClasses extends Sprite
   {
     public function RuntimeClasses()
     {}
      
     public function greet():String {
       return("Hello World");
     }
   }
 }
 

然後實作下列程式碼,

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

如果有多個 SWF 檔都包含相同名稱的已編譯類別,但是提供不同的實作,您可以將外部載入的 SWF 檔的類別與在本範例之後 SWF 檔的類別相互隔開。 在先前版本中,引用的子 SWF 是使用ApplicationDomain.currentDomain。 在本例中,則是建立新的ApplicationDomain,因此由 SWF 第二次所載入 Greeter 類別的屬性和方法並不會取代第一次所載入 Greeter 類別的屬性和方法。 您可以在 ClassLoaderload 方法中,修改當中的 context.applicationDomain 屬性來進行這項測試作業。

注意:

  • 由於 ClassLoader 類別會載入 SWF 檔,所以本機安全性必須處於檔案系統層級。
  • 為了執行這個範例,"en" 和 "es" 資料夾中必須各自都有名為 Greeter.swf 的 SWF 檔。

請使用下列程式碼,在 "en" 目錄中建立 Greeter.as 檔:

 package {
    import flash.display.Sprite;
    public class Greeter extends Sprite
    {
        public function Greeter()
        {
        }
        
        public function greet():String {
            return("Good Morning");
        }
    }
 }
 

然後在 "es" 目錄中建立非常類似的 Greeter.as 檔案:

 package {
    import flash.display.Sprite;
    public class Greeter extends Sprite
    {
        public function Greeter()
        {
        }
        
        public function greet():String {
            return("Buenos Dias");
        }
    }
}
 

編譯這兩個 SWF 檔,然後實作下列程式碼:

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




[ X ]為什麼顯示英文?
「ActionScript 3.0 參考」的內容是以英文顯示

並非所有「ActionScript 3.0 參考」的內容都翻譯為所有語言。當語言元素未翻譯時,就會以英文顯示。例如,ga.controls.HelpBox 類別並沒有翻譯為任何語言。因此在參考的繁體中文版本中,ga.controls.HelpBox 類別就會以英文顯示。