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

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

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

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
Question Не работает getDefinition() в файлах с другого домена

Помогите, пожалуйста, решить проблему с видимостью классов и кросс-скриптингом в разных доменах.
В общем ситуация такая: в главное приложение Main.swf (в домене siteA.com) загружаются swf-ки с разных доменов. С локального домена загружаются библиотеки компонентов и скинов, при чем в ApplicationDomain.currentDomain, т.е.:
Код AS3:
context = new LoaderContext(false, ApplicationDomain.currentDomain);
Loader.load(new URLRequest("http://siteA.com/style.swf"), context);
что бы их могли использовать все модули.
А каждый модуль загружается в свой домен, т.е. без указания context-а, чтобы не пересекались их внутренние классы и потом они нормально выгружались из памяти.

Так вот проблема в том, что если swf-ка загружена, допустим, с домена "siteB.com", то при обращении в ней:
Код AS3:
var objClass:Class = ApplicationDomain.currentDomain.getDefinition('com.style.BigButton') as Class;
var MyButton:MovieClip = new objClass();
выдается ошибка "ReferenceError: Error #1065: Переменная BigButton не определена". А для флешек с домена "siteA.com" всё нормально.

На всех доменах есть файл "crossdomain.xml" со всеми правами доступа, для всех флешек прописано "Security.allowDomain('*')" но не помогает все равно.

Что делать?

Старый 18.05.2011, 14:13
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Искать нужно в том домене, в котором BigButton определен. Он ведь в siteA.com определен? Естественно, что в siteB его не будет. Смотрите ApplicationDomain.parentDomain.

Кстати, а зачем вообще создавать экземпляры через new (ApplicationDomain.getDefinition(...) as Class)? Почему просто в дочернем домене не написать new com.style.BigButton?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Что делать?
Передавать в B.swf ссылку на домен, в котором "переменная определена".
__________________
...вселенская грусть

Старый 18.05.2011, 17:25
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 4  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
Спасибо за советы, но пока всё равно не удаётся решить это. Дело в том, что у меня есть синглтон, в котором я храню глобальные переменные и ссылки и через который я хотел передать ссылку на нужный ApplicationDomain, так вот даже он создаётся заново для флешки с другого домена. Т.е. во всех модулях с основного домена он один, а для модулей с других доменов он совсем иной (смотрел в дебагере свойства), как будто он в другой области памяти или хз, как это объяснить...

Старый 18.05.2011, 17:51
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Так и есть - в отдельном SecurityDomain'е. Почитайте, тут все разжевано
__________________
...вселенская грусть

Старый 18.05.2011, 20:08
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 6  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
Огоромное спасибо за ссылку - всё понятно и теперь всё заработало!

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

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

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


 


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


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