使用應用程式網域Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本 ApplicationDomain 類別的目的是用於儲存 ActionScript 3.0 的定義表格。SWF 檔中的所有程式碼都定義為存在應用程式網域中。您可以使用應用程式網域,分割位於相同安全性網域中的類別。這麼做能允許相同的類別具有多項定義,並讓子系重新使用父輩定義。 您可以在使用 Loader 類別 API 載入以 ActionScript 3.0 撰寫的外部 SWF 檔時,使用應用程式網域 (請注意,當您載入以 ActionScript 1.0 或 ActionScript 2.0 撰寫的影像或 SWF 檔時,將無法使用應用程式網域)。所有包含在載入類別中的 ActionScript 3.0 定義都會儲存在應用程式網域中。載入 SWF 檔時,您可以將 LoaderContext 物件的 applicationDomain 參數設定為 ApplicationDomain.currentDomain,指定將該檔案包含在與 Loader 物件檔案相同的應用程式網域中。藉由將載入的 SWF 檔置於相同的應用程式網域中,便可以直接存取其類別。如果您要載入包含內嵌媒體 (透過媒體相關類別名稱進行存取) 的 SWF 檔,或是要存取所載入 SWF 檔的方法,這就十分有用。 下列範例假設它可以存取不同的 Greeter.swf 檔案,該檔案定義公用方法 welcome(): package { import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; public class ApplicationDomainExample extends Sprite { private var ldr:Loader; public function ApplicationDomainExample() { ldr = new Loader(); var req:URLRequest = new URLRequest("Greeter.swf"); var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); ldr.load(req, ldrContext); } private function completeHandler(event:Event):void { var myGreeter:Class = ApplicationDomain.currentDomain.getDefinition("Greeter") as Class; var myGreeter:Greeter = Greeter(event.target.content); var message:String = myGreeter.welcome("Tommy"); trace(message); // Hello, Tommy } } } 另請參閱適用於 Adobe Flash Platform 的 ActionScript 3.0 參考中的 ApplicationDomain 類別範例。 當您處理應用程式網域時,其它要注意的事項包括:
下圖顯示在單一網域 domain1.com 中,從各種不同 SWF 檔載入內容的應用程式。根據所載入的內容而定,可能會用到不同的應用程式網域。下方的文字說明在應用程式中用來為每一個 SWF 檔設定適當應用程式網域的邏輯。 檢視完整大小的圖形
主應用程式檔案為 application1.swf,它包含會從其它 SWF 檔載入內容的 Loader 物件。在此案例中,目前的網域是「應用程式網域 1」。用法 A、用法 B 和用法 C 各說明不同的技巧,可用來在應用程式中為每一個 SWF 檔設定適當的應用程式網域。
|
|