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();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章