Flex 3 (скрипт действий): Как получить доступ к функции из загруженного SWF-файла?

StackOverflow https://stackoverflow.com/questions/2779136

Вопрос

Я загружаю в Actionscript файл SWF. До сих пор нет проблем, но я не нашел способ получить доступ к одному из его функций, лучшее, что если бы я мог получить доступ к главной функции в части MXML SWF.

Вот код основного файла 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-stail "if (swfapp.hasownproperty (initapp.hasownproperty (initApp")) {"никогда не правда, и вызов« SWFAPP.InitApp () »говорит, что эта функция не существует.

В оригинальной версии я добавил слушателей событий для httpstatusevent.http_status, ioerrorevent.io_error и securityeRorevent.security_Error. Но за исключением http_status = 0 ни один из них называется.

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

Это было полезно?

Решение

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

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

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

getInnerSWF().initApp();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top