Flex 3(Action Script):如何从加载的swf文件中访问函数?

时间:2010-05-06 07:04:38

标签: flex actionscript-3 swfloader

我在ActionScript中加载一个swf文件。到目前为止没有问题,但是我没有找到一种方法来访问它的一个函数,最好的办法是如果我可以访问swf的mxml部分中的main函数。

以下是属于swf的main-mxml文件的代码,该文件应加载并访问另一个swf:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="basket();">

    <mx:Script>
        <![CDATA[
            import mx.controls.SWFLoader;

            private function basket(): void
            {
                var swfLoader: SWFLoader = new SWFLoader();
                swfLoader.addEventListener( Event.COMPLETE, handleSWFLoaded );

                try {
                    swfLoader.load( "../../data/InternalSWF.swf" );
                } catch (error: Error) {
                    trace( "Couldn't load file !" );
                }
            }

            private function handleSWFLoaded( event: Event ): void
            {
                var swfApp:* = event.target.content;

                // This both ways don't work...

                //if (swfApp.hasOwnProperty("initApp")) {
                //  var initApp:Function = (swfApp["initApp"] as Function);
                //  initApp();
                //}

                // swfApp.initApp();
            }
        ]]>
    </mx:Script>

    <mx:Text id="output" width="100%" textAlign="center" />

</mx:Application>

if-Statement“if(swfApp.hasOwnProperty(”initApp“)){”永远不会是真的 调用“swfApp.initApp()”表示该函数不存在。

在原始版本中,我为HTTPStatusEvent.HTTP_STATUS,IOErrorEvent.IO_ERROR和SecurityErrorEvent.SECURITY_ERROR添加了事件侦听器。但是除了HTTP_STATUS = 0之外,没有一个被调用。

我是如何尝试做错的全部想法?

1 个答案:

答案 0 :(得分:0)

在帖子后几天找到解决方案:)

加载swf后,您可以使用以下代码访问内部函数(在此示例中为initApp()):

public function getInnerSWF():Object
{
  var sysMan:SystemManager = swfLoader.content as SystemManager;<br>
        return sysMan.document;
}

getInnerSWF().initApp();