使用應用程式網域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 檔設定適當的應用程式網域。
|
|