![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Есть флешка "лоадер". Она подгружает в себя две других (skin1 и skin2);
Во флешках skin есть мувики в либе с одинаковыми именами классов (но выглядят они по-разному). Флэшки skin гружу так: skin1 this.skinLoader = new Loader();
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
var url:String = this.flashVars.skinUrl;
var myUrlRequest:URLRequest = new URLRequest(url);
skinLoader.load(myUrlRequest, loaderContext);
skinLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
this.skinLoader_x2 = new Loader();
var url_x2:String = this.flashVars.skinUrl_x2;
var myUrlRequest_x2:URLRequest = new URLRequest(url_x2);
skinLoader_x2.load(myUrlRequest_x2);
skinLoader_x2.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete_x2);
private function onLoadComplete(e:Event):void {
this.applicationDomain = e.target.applicationDomain;
//switchToNormalMode();
}
private function onLoadComplete_x2(e:Event):void {
this.applicationDomain_x2 = e.target.applicationDomain;
//switchToDoubleMode();
}
//1 var className="exportedMCName"; var currClass:Class=(applicationDomain.getDefinition(className) as Class); addChild(new currentClass); //2 var className="exportedMCName"; var currClass:Class=(applicationDomain_x2.getDefinition(className) as Class); addChild(new currentClass); Если в skin1 нет мувика с таким именем, то только тогда добавляется из skin2
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
|
|
|||||
|
Ну так и задумано, чтобы слить аппликэйшен домены лоадера и скин1,
а аппликэшен домен скин2 оставить отдельно. Тем не менее скин1 и скин2 грузятся в разные аппликейшен домены. То что они разные проверяю так: Создаю мувики с уникальными именами и проверяю через hasDefinition() В том и вопрос что я обращаюсь к конструктору класса с одинаковыми именами и чтобы различить эти классы я разложил их по разным аппликэйшн доменам. Но этот подход не работает как ожидалось: Я явно указываю конкретный аппликэшен домен и имя класса в нем, а флэш попадает на класс с таким же именем но в другом аппликейшен домене. В хелпе написано что вообще возможна ситуация с перекрыванием без сообщения об ошибке, но это невозможно когда обращение происходит явно к конкретному аппликэшен домену через getDefinition() Вечером постараюсь выложить пример, чтобы было понятнее о чем я говорю
__________________
Сам себе репортер Последний раз редактировалось terbooter; 12.05.2008 в 15:02. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
currentDomain говорит об обратном.
Однажды определенный класс в одном домене, не будет переопределен другим классом из флешки, которая подгружается в тот же домен. Чтобы добиться требуемого, надо в контексте указать новый домен, а не текущий. |
|
|||||
|
Ага.
Моя ошибка что я думаю что гружу в разные домены this.skinLoader_x2 = new Loader();
var currentAppDomain:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
var loaderContext:LoaderContext = new LoaderContext(false, currentAppDomain);
var url_x2:String = this.flashVars.skinUrl_x2;
var myUrlRequest_x2:URLRequest = new URLRequest(url_x2);
skinLoader_x2.load(myUrlRequest_x2, loaderContext);
skinLoader_x2.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete_x2);
private function onLoadComplete_x2(e:Event):void {
trace(this.skinLoader_x2.contentLoaderInfo.sameDomain);// Why true?
}
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Потому что parentDomain указан. Объявленный класс в родительском домене тоже не переопределяется.
|
|
|||||
this.skinLoader_x2 = new Loader();
var currentAppDomain:ApplicationDomain = new ApplicationDomain(null);
var loaderContext:LoaderContext = new LoaderContext(false, currentAppDomain);
var url_x2:String = this.flashVars.skinUrl_x2;
var myUrlRequest_x2:URLRequest = new URLRequest(url_x2);
skinLoader_x2.load(myUrlRequest_x2, loaderContext);
skinLoader_x2.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete_x2);
private function onLoadComplete_x2(e:Event):void {
trace(this.skinLoader_x2.contentLoaderInfo.sameDomain);// Why true?
}
*Пойду в аптеку... за ядом*
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
sameDomain относится не к ApplicationDomain, а к домену, с которого загружена флешка. В данном случае, у обеих localhost.
|
|
|||||
|
Ок, с sameDomain погорячился, но вот это:
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А что есть this.applicationDomain?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|