2015-03-13 50 views
0

我對Flex相當陌生,當我有一個主要的Flex程序(我們稱之爲「Parent.swf」)時嘗試加載另一個Flex應用程序(Child.swf )通過SWFLoader類/組件。 FlashDevelop上的環境是Flex 4.6。Flex mx:SWFLoader加載不正確的SWF文件

調用似乎正常工作(即沒有返回IO或沙箱錯誤),只是它似乎將「Parent.swf」重新加載到SWFLoader而不是「Child.swf」中。

例如,我有含有Parent.swf:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      initialize="doStartup()" 
      width="1024" height="768"> 

... 

<fx:Script> 

    <![CDATA[ 

     private function doStartup():void 
     { 
      trace("STARTING UP!"); 
     } 

     .... 

    ]]> 

</fx:Script> 

<mx:VBox top="10" left="10" width="100%" horizontalAlign="center"> 
    <mx:Label text="I'M A LOADER!" /> 
</mx:VBox> 
<mx:VBox top="10" left="10" width="100%" horizontalAlign="center"> 
    <mx:SWFLoader 
        id="pluginLoader" 
        source="plugins/Child.swf" 

        autoLoad="true" 
        height="400" width="400" 
        complete="onPluginLoaded(event);" 
        ioError="onPluginLoadError(event);" 
        securityError="onPluginSecurityError(event);" 

        httpStatus="onHttpStatus(event);" 
        init="onInit(event);" 
        open="onOpen(event);" 
        progress="onProgress(event);" 
        unload="onUnload(event);" 
        /> 
</mx:VBox> 

.... 

子swf包含:

.... 
<mx:Label text="I'M A PLUGIN!" /> 
.... 

上述跡上重複的負荷(即 「啓動!」)的Child.swf,然後再次嘗試加載失敗的Child.swf,因爲調用的工作目錄現在位於「插件」目錄中。 所以它似乎知道該文件存在並加載它,但以某種方式在Parent.swf上方交換。 請注意,如果我直接執行Child.swf,我可以驗證它是我所期望的(例如,帶有單個標籤的Flex應用程序說「我是插件!」)。

我也嘗試了各種其他的方法,例如通過代碼實例化SWFLoader,但同樣的問題發生。我甚至試圖切換到模塊,但也有相同的行爲。 無論本地運行還是通過Web服務器運行,它都會失敗。

有沒有人有任何想法如何發生?有沒有一些方法可以讓Parent.swf的main.mxml覆蓋Child.swf? (對不起,本文)

回答

0

我需要完整的代碼才能發現。但我可以建議兩個思路:

  1. 檢查onPluginLoaded功能,它可以通過家長代替孩子

  2. 檢查被調用,如果你沒有任何類或對象名稱重複生成能一個交叉引用。例如,Parent和Child都使用MyScrollbarClass。由於這一類是首先由家長加載,它會創建時的負載在孩子一樣MyScrollbarClass_1

+0

Gaah,我覺得像這樣一個白癡被命名爲一個新名稱。這與你的第二點有關......這兩個應用程序都使用main作爲mxml文件名。如果我將其中一個更改爲不同的名稱,那麼它一切正常! 乾杯哈里森。 – user4667964 2015-03-18 00:31:15