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();
    }
}


 

posted @ 2010-05-07 16:34  1901  阅读(1290)  评论(2编辑  收藏  举报