Flex 3 (البرنامج النصي الإجراء): كيفية الوصول إلى وظيفة من ملف SWF محمّل؟
-
03-10-2019 - |
سؤال
أقوم بتحميل ملف 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();