如何通过SWFLoader从加载的SWF访问“主”SWF的变量?

时间:2012-01-31 20:56:13

标签: actionscript-3 flex

我正在使用Flex构建的网站,但编译后的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的内容显示在 extSwf SWFLoader的位置。

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

我有一些全局变量要发送到每个加载的SWF文件
(以及我想从加载的SWF文件发送到'main'SWF文件的一些变量)。

一个网站说我可以通过加载 modules / register.swf?var1 = hi&amp; var2 = hello 来发送这些变量,但是可以看到HTTP标头的人(例如 Firefox中的实时HTTP标头可以看到所有这些变量。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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

Alert.show(FlexGlobals.topLevelApplication.myvar); 

使用公共功能:

FlexGlobals.topLevelApplication.myFunction();

我只需要正确的关键字(顶级应用)即可在互联网上搜索。