Flex 3 (البرنامج النصي الإجراء): كيفية الوصول إلى وظيفة من ملف SWF محمّل؟

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

سؤال

أقوم بتحميل ملف SWF في ActionScript. حتى الآن لا مشكلة ، لكنني لم أجد طريقة للوصول إلى إحدى وظائفها ، سيكون أفضل شيء إذا كان بإمكاني الوصول إلى الوظيفة الرئيسية في جزء 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-Statement "if (swfapp.hasownproperty (" initapp ")) {" لا يكون صحيحًا أبدًا والدعوة "swfapp.initapp ()" يقول إن هذه الوظيفة غير موجودة.

في الإصدار الأصلي ، أضفت مستمعي الأحداث لـ httpstatevent.http_status ، ioerrorevent.io_error و securityerrorevent.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