Flex與Flex創建的swf通信

加載子SWF的Flex程序代碼


<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>
<![CDATA[

import mx.managers.SystemManager;
import mx.controls.Label;

[Bindable]
public var loadedSWF:SystemManager;

private function initNestedAppProps():void {
loadedSWF = SystemManager(myLoader.content);
}

public function updateLabel():void {
lbl.text=loadedSWF.application["text_1"].text;
}

// Write to the Label control in the loaded application.
public function updateNestedLabels():void {
loadedSWF.application["text_2"].text = text_value.text;
}
]]>
</mx:Script>

<mx:Label id="lbl" x="204" y="69" fontSize="12"/>
<mx:SWFLoader id="myLoader" width="250" height="200"
source="subswf.swf"
creationComplete="initNestedAppProps();" x="13" y="124"/>

<mx:Button label="獲得加載SWF中的控制值"
click="updateLabel();" fontSize="12" x="10" y="65"/>
<mx:Button label="修改加載SWF中的控制值"
click="updateNestedLabels();" fontSize="12" x="10" y="33"/>
<mx:TextInput id="text_value" x="192" y="35" fontSize="12"/>

</mx:Application>







子SWF程序代碼


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel x="0" y="0" width="250" height="200" layout="absolute" title="加載的SWF文件" fontSize="12">
<mx:TextInput id="text_1" x="10" y="41" fontSize="12" text="大家好,我是FLEX"/>
<mx:TextInput id="text_2" x="10" y="88" fontSize="12"/>
</mx:Panel>
</mx:Application>





如果需要調用子swf的方法,可以將loadSwf的application轉換成Object,然後再調用子swf中的方法,否則會出現找不到方法的錯誤。

var loadSwf:SystemManager = SystemManager(myLoader.content);
(loadSwf.application as Object).test();



源碼下載



#===============================================================================

後來在使用發現上面的代碼還是有隱患的,如果被加載的swf文件比較大,可能出項_loadSwf中的application值爲null的情況。
下面是我補充的一段代碼。


補充代碼
private var _loadSwf:SystemManager;
private var content:Image;
private function onLoadCompleted(event:Event):void
{
_loadSwf = SystemManager(content.content);
_loadSwf.addEventListener(FlexEvent.APPLICATION_COMPLETE,swfReady);


function swfReady(event:FlexEvent):void
{
_loadSwf.removeEventListener(FlexEvent.APPLICATION_COMPLETE,swfReady);
(_loadSwf.application as Object).test();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章