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


 

你可能感兴趣的:(Flex)