Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2013, 16:58
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 1  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
По умолчанию Список классов в загруженном swf.

UPDATE: Проблема решена. Решение возможно в версии плеера 11.3 и выше.
Всем доброго времени суток.
У меня возникла некоторая сложность.
Допустим у нас есть swf файл, в котором есть несколько мувиклипов.
Все они помечены на экспорт в первый кадр.
Мы грузим swf-ку лоадером. И на событие COMPLETE мы можем сделать следующее:
Код AS3:
var _classDef:Class = ApplicationDomain.currentDomain.getDefinition("SomeMovieClipClass") as Class;
Так вот. В примере выше никаких проблем нет. До тех пор, пока нам известно имя класса
Код AS3:
"SomeMovieClipClass"
Суть проблемы - добраться до списка имён классов внутри загруженной swf.

Добавлено через 23 минуты
Нашёл одно решение. Только для версии флешплеера 11.3 и выше.
Но оно не совсем удачное, т.к. есть лишние операции.
Код AS3:
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);
}
Добавлено через 34 минуты
Проблема решена:
Нужно не передавать свой домен при загрузке.
Тогда после загрузки флешка будет иметь отличный от базового домен.
И тогда можно вычленить все классы одной строкой.
Код AS3:
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());
}
UPDATE:
Если нужно брать swf-ку удалённо - то:
Код AS3:
_loader.load(_request, new LoaderContext(true, null, SecurityDomain.currentDomain));


Последний раз редактировалось Frost47rus; 10.11.2013 в 17:39.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:40.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.