星期四, 2月 04, 2010

swfloader vs Loader !! swfloader 只是方便而已..

因為swfloader的方便,原本想用它直接讀swf檔就好了,後來發現他沒有loader的靈活..
加上不知道怎麼樣讓被讀取的swf和讀取者溝通
(把bubble設成true可以單方向溝通,但是不能用sharedEvents,這個部分我另外PO文記錄)
後來整個翻新成用loader,做白工了 囧

以下就介紹一下swfloader


SWFLoader 控件可以將一個 Flex 應用程序最為 SWF 文件載入到另一個 Flex 應用程序。SWFLoader 控件提供控制其內容大小的屬性,也可以設置其自身的大小以適應其內容。默認是內容的尺寸改變以適應 SWFLoader 控件。 SWFLoader 控件也可以控制其內容的載入,並且監測載入的進度。

當向主程序載入子程序,要注意一下因素:

版本:早期版本的 Flex 或 ActionScript 產生的 SWF 文件可能在使用 SWFLoader 控件載入後無法正常工作。可以使用 SWFLoader 控件的 loadForCompatibility 屬性來確保載入主應用程序的子應用程序正常工作,即使此應用程序被不同版本的編譯器編譯。

安全:在載入子應用程序的時候,特別是通過第三方創建的應用程序,需要考慮將它們載入到其自己的安全域( SecurityDomain )。當主應用程序與其子應用程序之間的交互層級上有額外限制的時候,它將確保內容是不受攻擊的。

SWFLoader 控件允許嚮應用程序中載入 GIF / JPEG / PNG / SVG / SWF 等不包含 Flex 應用程序的文件,以及表現 SWF / GIF / JPEG / PNG 的 ByteArray 。

註:Flex 可以為 GIF / JPEG / PNG SVG SWF 文件的載入引入 Image 控件。可以使用 Image 控件載入靜態圖形文件和 SWF 文件,也可以為載入作為 SWF 文件的 Flex 應用程序使用 SWFLoader 控件。 Image 控件也可以用於自定義單元格的渲染( Renderer)和條目編輯器( item editor)。

SWFLoader 控件不能接收焦點。然而載入 SWFLoader 控件的內容可以接收焦點,並且有其自己的焦點交互。

引用自: Aslan Say - Flex 4 : SWFLoader 控件


不管用loader或swfloader,都要考慮ApplicationDomain和SecurityDomain
不過swfloader有trustContent屬性,可是我也不知道它能幹嘛,目前還沒有試用過。

最後就是事件交換這個部分,原本我以為載入後就可以互相收到事件,結果沒有..


遇到的問題是:
現在用flex的swfloader讀取swf檔案(假設 a.swf 讀取 b.swf)

現在我在b.swf 用dispatchEvent送出一個自定義的事件
怎麼在a.swf 監聽這個事件?

直接監聽似乎收不到

拜過Google大神後,試過用 trustContent="true" 或是
this.xxx.loaderContext.applicationDomain =
ApplicationDomain.currentDomain;

好像也不行。

→ aquarianboy:試試dispatchEvent(new YourEvent('aabbcc', true)); 01/31 15:07

引用: ptt flash #1BPIQjnJ


所以後來就使用sharedEvents..不過swfloader似乎沒有contentLoaderInfo的概念,
用loaderInfo沒辦法溝通..
說不定有方法吧,只是我不懂而已,有人知道的話就麻煩傳授一下囉
最後就改用loader了...

sharedEvents換篇在講吧

參考:
Adobe® Flex™ 3.2 語言參考 - SWFLoader
Adobe® Flex™ 3.2 語言參考 - LoaderInfo
Adobe® Flex™ 3.2 語言參考 - ApplicationDomain
Adobe® Flex™ 3.2 語言參考 - SecurityDomain
9RIA.com天地會 - 關於SWFLoader中的應用程序域ApplicationDomain問
Aslan Say - Flex 4 : SWFLoader 控件
Ticore's Blog - Flex Image, SWFLoader Align Bug

沒有留言:

張貼留言