標籤雲

搜尋此網誌

2008/06/12

如何載入其他SWF裡的類別

這是 shinder 老師的書裡看到的
我個人覺得屬於比較高階的知識了...
但由於 shinder 老師寫書的風格比較不拖泥帶水
因此也不會把來龍去脈講得很清楚(反正DOC裡都查得到)
但為了方便理解, 所以我查了一下規格書, 做個筆記, 把它記在這邊
----------------------------------------
1. ApplicationDomain 類別
在透過 Loader 類別載入外部 SWF 檔時使用。載入之 SWF 檔中使用的所有 ActionScript 3.0 定義,都會儲存在 ApplicationDomain 中,該網域則由 LoaderContext 物件的 applicationDomain 屬性所指定。
ApplicationDomain 不具安全性用途,這些網域是要用來管理 ActionScript 程式碼的相關單位。
(LoaderInfo 物件也含有唯讀的 applicationDomain 屬性。)

currentDomain:ApplicationDomain [read-only]
parentDomain:ApplicationDomain [read-only]

public function getDefinition(name:String):Object
//會從指定的應用程式網域取得公用定義。 定義可以是類別、名稱空間或函數的定義。
//name:String — 定義的名稱

2. LoaderContext 的 applicationDomain 屬性
如果將載入的 SWF 檔置入自己的安全性網域 (不論是因為 SWF 檔來自於自己的網域,還是因為將該檔匯入至自己的安全性網域),就可以控制載入之 SWF 檔的 applicationDomain 選擇。

而這個屬性的值可以有四種來源:(父輩為載入者, 子系為被載入者)
(1)- new ApplicationDomain(ApplicationDomain.currentDomain)
預設值。允許載入的 SWF 檔直接使用父輩的類別。如果父輩希望使用子系的類別,便必須呼叫 ApplicationDomain.getDefinition() 。
(2)- ApplicationDomain.currentDomain
載入完成時,父輩和子系都可直接使用彼此的類別。<這是 shinder 老師用的方法>
(3)- new ApplicationDomain(null)
完全分隔載入器和載入對象,允許兩者以相同的名稱定義不同的類別,而不會造成衝突或遮蓋。 兩端都能看到另一端之類別的唯一方式,便是呼叫 ApplicationDomain.getDefinition() 方法。
(4)- 其它
例:new ApplicationDomain(ApplicationDomain.currentDomain.parentDomain)

沒有留言: