2012-01-31 57 views
0

我正在使用Flex构建的网站上工作,但编译后的SWF文件非常大。这些网站有多个页面。如何通过SWFLoader从加载的SWF访问“主”SWF的变量?

所以我想为每个新页面创建一个新的MXML项目并使用SWFLoader加载它。
我发现这个例子:

public function extSwfLoaded(evt:Event):void { 
    var sysmgr:SystemManager = (extSwf.content as SystemManager); 
    sysmgr.addEventListener(FlexEvent.APPLICATION_COMPLETE, function(event:FlexEvent):void { 
     var sysmgr:SystemManager = (event.currentTarget as SystemManager); 
     var swfApp:Application = (sysmgr.application as Application); 
    } 
}); 

public function gotoPage(page:String):void { 
    extSwf.addEventListener(Event.INIT, extSwfLoaded); 

    var now:Date = new Date(); 

    switch(page) { 
     case "register": 
      openedPage = "register"; 
      extSwf.load('modules/register.swf?anticache=' + now.getTime()); 
      break; 
    } 
} 

而在MXML:

<mx:SWFLoader id="extSwf" complete="extSwfLoaded(event)" width="100%" /> 

<s:Label text="Register" useHandCursor="true" buttonMode="true" click="gotoPage('register')" /> 

这完美的作品。 modules/register.swf的内容显示在SWFLoader的地址extSwf处。

但是:我不知道如何与'主'SWF和加载的SWF文件进行交互。

我有一些全局变量,我想发送到每个加载的SWF文件
(和一些变量,我想从加载的SWF文件发送到'主'SWF文件)。

一个网站说,我可以通过加载模块发送这些变量/ register.swf?VAR1 =喜& VAR2 =你好,但谁可以看到HTTP标头(例如使用在Firefox 直播HTTP头 )可以看到所有这些变量。

那么,是否可以加载SWF文件并向它们发送一些变量?当我有一个新的全局变量时,我不必打开并编辑和重新编译每个MXML项目?

非常感谢!

+0

对我来说,你应该可以在每个页面的swf中使用像'initWithWrapper(handleToWrapper:ClassNameOfWrapper)'这样的方法,一旦swf被加载完成,你的包装swf就会调用它。一旦该链接建立,他们可以相互交谈。您的'ClassNameOfWrapper'类将不得不公开swf可以与之交互的方法。 – Ian 2012-01-31 22:46:38

回答

0

它看起来像这样可以显示我的'主''MXML的变量。

import mx.controls.Alert; 
import mx.core.FlexGlobals; 

Alert.show(FlexGlobals.topLevelApplication.myvar); 

而对于使用公共职能:

FlexGlobals.topLevelApplication.myFunction(); 

我只是需要正确的关键字(顶级应用程序)来搜索它在互联网上。