![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 12
|
Здравствуйте.
Разрабатывая приложение для вконтакта, неожиданно наткнулся на странную багу и никак не могу понять в чем причина. Прошу прощения, если создал тему не в том разделе, но мне кажется, к API вконтакта она не относится. Суть в следующем: у меня есть несколько swf-ок с ассетами, которые я загружаю со своего сервера при старте приложения. Для загрузки и управления используется BulkLoader. Для упрощения понимания, обозначим загружаемые флешки так: _loader.add(_uri1.toString(), { id: "asset1", context: _LdrContext }); _loader.add(_uri2.toString(), { id: "asset2", context: _LdrContext }); _loader.addEventListener(BulkLoader.COMPLETE, _assets_complete_func); _loader.addEventListener(BulkLoader.ERROR, _assets_error_func); _loader.addEventListener(BulkLoader.PROGRESS, _assets_progress_func); _loader.start(); Доступ к конкретным ассетам организован так: public function getAssetClass(asset_id:String, class_name:String):Class { var res:Object = _loader.getContent(asset_id); if(res) { try { var cl:Class = res.loaderInfo.applicationDomain.getDefinition(class_name) as Class; } catch(e) { return null; } return cl; } else { return null; } } public function createAssetSprite(assetCollection:String, assetClassName:String):Sprite { var assetClass:Class = getAssetClass(assetCollection, assetClassName); var art:Sprite = null; if(!assetClass) { var noimg = ((new NoImage()) as Sprite); } else { var bmp:Bitmap = new assetClass() as Bitmap; art = new Sprite(); art.addChild(bmp); } return art; } И, собственно, в чем проблема: запуская приложение из вконтакта, вне зависимости какой asset_id я передаю в метод createAssetSprite, результирующий спрайт всегда берется из одной и той же флешки. Поясню на примере: asset1 - это набор аватаров для мальчиков, asset2 - аватары для девочек, кликая на кнопку юзер выбирает свой пол. Так вот из вконтакта показываются либо только мальчики, либо только девочки. Когда запускаю то же самое приложение из CS5.5 или просто swf-ку из винды - с каждым кликом мальчик/девочка чередуются, т.е. все происходит как и задумывалось. Подскажите, пожалуйста, в чем может быть проблема? Контролирует ли как-то вконтакт подгружаемые флешки? Может быть как-то кэш браузера влияет? Спасибо. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
В какой Application Domain грузятся ваши флешки (кторые BulkLoader грузит)?
|
|
|||||
|
Регистрация: Jun 2011
Сообщений: 12
|
Цитата:
вот с таким LoaderContext я инициализирую BulkLoader |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Угу. Вы загружаете все в один и тот же application domain. В одном appdomain'е вы не можете иметь несколько классов с одним и тем же именем. Если вы попытаетесь загрузить несколько классов, везде будет использован тот, который загружен первым. Грузите каждую флешку в новый (дочерний) ApplicationDomain. Каждую - в свой!
Локально работает потому, что вы локально загружаете в другой security sandobox (и, соотвтетсвенно, в другой application domain). |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 12
|
т.е. для каждой загружаемой флешки следует задать свой loaderContext?
_loader.add(_uri1.toString(), { id: "asset1", context: new LoaderContext(false, new ApplicationDomain()) }); _loader.add(_uri2.toString(), { id: "asset2", context: new LoaderContext(false, new ApplicationDomain()) }); _loader.addEventListener(BulkLoader.COMPLETE, _assets_complete_func); _loader.addEventListener(BulkLoader.ERROR, _assets_error_func); _loader.addEventListener(BulkLoader.PROGRESS, _assets_progress_func); _loader.start(); |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Да. Возможно, в каждом случае еще и SecurityDomain нужно будет указывать. Это зависит от того, как флешки друг с другом взаимодействуют.
|
|
|||||
|
Регистрация: Jun 2011
Сообщений: 12
|
взаимодействие у них такое: есть основная флешка, она загружает кучку мелких с картинками, по вышеупомянутой схеме делает из картинок спрайты и отображает
Добавлено через 2 часа 58 минут не подскажете, где можно популярно почитать о связке Application/Security domain? как это все работает и как их использовать? Добавлено через 18 часов 46 минут ну вроде бы все решилось ApplicationDomain для каждой загружаемой флешки новый, с родителем - currentDomain SecurityDomain у всех один - currentDomain maxkar, еще раз спасибо за наводку ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|