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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.05.2008, 14:23
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 1  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
По умолчанию ApplicationDomain. Во флэшку подгружаются две других. Как разделить одинаковые имена.

Есть флешка "лоадер". Она подгружает в себя две других (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);
skin2
Код:
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);
По событию 'окончание загрузки' получаю два разных applicationDomain-a
Код:
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
Если в skin1 нет мувика с таким именем, то только тогда добавляется из skin2

Старый 12.05.2008, 14:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Эта строка говорит сама за себя:
Код:
new LoaderContext(false, ApplicationDomain.currentDomain);

Старый 12.05.2008, 14:56
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 3  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Ну так и задумано, чтобы слить аппликэйшен домены лоадера и скин1,
а аппликэшен домен скин2 оставить отдельно.
Тем не менее скин1 и скин2 грузятся в разные аппликейшен домены.

То что они разные проверяю так:
Создаю мувики с уникальными именами и проверяю через hasDefinition()

В том и вопрос что я обращаюсь к конструктору класса с одинаковыми именами
и чтобы различить эти классы я разложил их по разным аппликэйшн доменам.
Но этот подход не работает как ожидалось: Я явно указываю конкретный аппликэшен домен и
имя класса в нем, а флэш попадает на класс с таким же именем но в другом аппликейшен домене.

В хелпе написано что вообще возможна ситуация с перекрыванием без сообщения об ошибке, но это невозможно когда обращение происходит явно к конкретному аппликэшен домену через getDefinition()

Вечером постараюсь выложить пример, чтобы было понятнее о чем я говорю


Последний раз редактировалось terbooter; 12.05.2008 в 15:02.
Старый 12.05.2008, 15:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от terbooter Посмотреть сообщение
Тем не менее скин1 и скин2 грузятся в разные аппликейшен домены.
currentDomain говорит об обратном.
Однажды определенный класс в одном домене, не будет переопределен другим классом из флешки, которая подгружается в тот же домен.
Чтобы добиться требуемого, надо в контексте указать новый домен, а не текущий.

Старый 12.05.2008, 15:59
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 5  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Ага.
Моя ошибка что я думаю что гружу в разные домены
Код:
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?
	
}

Старый 12.05.2008, 16:03
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Потому что parentDomain указан. Объявленный класс в родительском домене тоже не переопределяется.

Старый 12.05.2008, 16:11
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 7  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Код:
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?
	
}
Но тут то явно должны быть разные?

*Пойду в аптеку... за ядом*

Старый 12.05.2008, 16:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
sameDomain относится не к ApplicationDomain, а к домену, с которого загружена флешка. В данном случае, у обеих localhost.

Старый 12.05.2008, 16:53
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 9  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Ок, с sameDomain погорячился, но вот это:
Код:
trace((this.applicationDomain == this.applicationDomain_x2)); // true

Старый 12.05.2008, 17:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А что есть this.applicationDomain?

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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