Flex 3 (Action Script): как получить доступ к функции из загруженного SWF-файла? - PullRequest
0 голосов
/ 06 мая 2010

Я загружаю в ActionScript SWF-файл. Пока проблем нет, но я не нашел способа получить доступ к одной из ее функций, лучше всего было бы, если бы я мог получить доступ к основной функции в части mxml swf.

Вот код файла main-mxml, который принадлежит SWF, который должен загрузить и получить доступ к другому 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 "if (swfApp.hasOwnProperty (" initApp ")) {" никогда не выполняется и вызов swfApp.initApp () говорит, что эта функция не существует.

В оригинальной версии я добавил прослушиватели событий для HTTPStatusEvent.HTTP_STATUS, IOErrorEvent.IO_ERROR и SecurityErrorEvent.SECURITY_ERROR. Но кроме HTTP_STATUS = 0 ни один из них не вызывается.

Вся идея, как я пытаюсь сделать это неправильно?

1 Ответ

0 голосов
/ 31 мая 2010

Нашел решение через несколько дней после публикации:)

После загрузки swf вы можете использовать следующий код для доступа к внутренним функциям (в этом примере initApp ()):

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

getInnerSWF().initApp();
...