![]() |
|
||||||||||
|
|||||
|
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
UPDATE: Проблема решена. Решение возможно в версии плеера 11.3 и выше.
Всем доброго времени суток. У меня возникла некоторая сложность. Допустим у нас есть swf файл, в котором есть несколько мувиклипов. Все они помечены на экспорт в первый кадр. Мы грузим swf-ку лоадером. И на событие COMPLETE мы можем сделать следующее: var _classDef:Class = ApplicationDomain.currentDomain.getDefinition("SomeMovieClipClass") as Class; Суть проблемы - добраться до списка имён классов внутри загруженной swf. Добавлено через 23 минуты Нашёл одно решение. Только для версии флешплеера 11.3 и выше. Но оно не совсем удачное, т.к. есть лишние операции. private var _classesListOnStart:Vector.<String>; private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); _classesListOnStart = ApplicationDomain.currentDomain.getQualifiedDefinitionNames(); var _url:String = 'test.swf'; var _loader:Loader = new Loader(); var _request:URLRequest = new URLRequest(_url); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete); var _loaderContext:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain); _loader.load(_request, _loaderContext); } private function onLoadingComplete(e:Event):void { var _classesListOnLoadingFinished:Vector.<String> = ApplicationDomain.currentDomain.getQualifiedDefinitionNames(); var i:int; for (i = 0; i < _classesListOnStart.length; i++) { var index:int = _classesListOnLoadingFinished.indexOf(_classesListOnStart[i]); if (index >= 0) { _classesListOnLoadingFinished.splice(index, 1); } } trace(_classesListOnLoadingFinished); } Проблема решена: Нужно не передавать свой домен при загрузке. Тогда после загрузки флешка будет иметь отличный от базового домен. И тогда можно вычленить все классы одной строкой. private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); var _url:String = 'test.swf'; var _loader:Loader = new Loader(); var _request:URLRequest = new URLRequest(_url); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete); _loader.load(_request, new LoaderContext(true)); } private function onLoadingComplete(e:Event):void { var _loadedApplicationDomain:ApplicationDomain = (e.target as LoaderInfo).applicationDomain; var _classesListOnLoadingFinished:Vector.<String> = _loadedApplicationDomain.getQualifiedDefinitionNames(); var _classDefinition:Class = _loadedApplicationDomain.getDefinition(_classesListOnLoadingFinished[0]) as Class; addChild(new _classDefinition()); } Если нужно брать swf-ку удалённо - то: Последний раз редактировалось Frost47rus; 10.11.2013 в 17:39. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|