概要
當我們加載外部swf時,必須要了解應用程序域(Application Domain)。從Adobe官方文件中,我們可以得知應用程序域能夠把處于同一個安全域(Security Domain)中的類分離開,這樣就可以讓一個類的多個定義共存,或是讓多個子應用來共享父應用的類定義。簡單點理解就是應用程序域為類定義提供了分區(qū)功能。
應用程序域
一個類的多個定義共存:內(nèi)存中有多個類,它們名稱相同,但定義不同定義,由于處于不同的應用程序域,所以互不干擾,得以共存。
子應用共享父應用的類定義:N個子應用引用同一個父應用的所提供的類定義,當父應用更新時,子應用所引用的內(nèi)容也會隨之更新。
當加載外部swf文件時,可以為其設置三種應用程序域:
一、將加載的swf指定至一個既存的應用程序域中。
二、將加載的swf指定為一個既存的應用程序域的子應用程序域。
三、為加載的swf指定一個全新的應用程序域。
我們先來看一下官方文檔的說明圖:
圖中共有四個文件,分別為application1.swf、module1.swf、application2.swf和module3.swf。module1.swf、application2.swf和module3.swf均被application1.swf加載,其中module1.swf與application1.swf屬于同一個域,module3.swf被劃分至application1.swf的子應用程序域,最后是application2.swf,它完全擁有一個獨立的應用程序域。
獨立域,在應用定義相同的情況下,可以使幾個版本并行
共享域,增加新的類定義(RSL)
子域,子域中的類引用父應用中的類定義
注意事項
加載圖片或是用ActionScript 1.0/2.0 編寫的SWF文件時,不可以使用應用程序域,因為應用程序域只能應用于ActionScript 3.0,我們可以通過函數(shù)“getDefinition”來獲取已經(jīng)加載的類定義
應用程序域之間形成的是一個樹形結構,它們之間靠“parentDomain”來鏈接,而最頂層是系統(tǒng)域(system domain),它包括了Flash內(nèi)置類型,如Sprite、Textfield等
當一個子應用中的類定義無論是以共享域還是子域的形式被加載,如過發(fā)現(xiàn)父應用中已經(jīng)定義了的這個即將被加載的類,那么這個類定義的加載被忽略
應用程序域僅在一個安全域中有效,它不允許跨域使用
更多例子
共享域加載
- the HelloW class from MyApplication
- the SWFHelloW class from SWF1
子域加載
- the HelloW class from MyApplication
- the SWFHelloW class from SWF1 and SWF2
獨立域加載
- the HelloW class from MyApplication
- the HelloW class from SWF1 and SWF2
- the SWFHelloW class from SWF1 and SWF2
TODO疑問
當我們在子應用中定義了工具方法create,其中的ApplicationDomain.currentDomain是父應用的currentDomain,還是當前的currentDomain?
參考文檔
http://blogs.adobe.com/rgonzalez/2006/06/applicationdomain.html
http://ghalex.com/blog/application-domains-in-flex
http://livedocs.adobe.com/flex/3/html/help.html?content=18_Client_System_Environment_5.html
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
