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

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