Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема Interface и ApplicationDomain (http://www.flasher.ru/forum/showthread.php?t=156374)

Xpb7 20.05.2011 14:19

Проблема Interface и ApplicationDomain
 
Добрый день -

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

Например, имея класс в libs.swf:
( В библиотеке libs.fla имеется класс AchievementPanelGfx, у него проставлен base class -
gfx.base.AchievementPanelBase ).

Код AS3:

package gfx.base
{
        import flash.display.MovieClip;
        import flash.text.TextField;
 
        public class AchievementPanelBase extends MovieClipElementBase implements ISkinElement
        {
                public var tAchiName:TextField;
                public var buyB:MovieClip;
 
                function AchievementPanelBase( )
                {
 
                }
        }
}

Так вот, после загрузки главным приложением libs.swf, то получаем следующее
если libs.swf загружен с другого домена:

Код AS3:

var GfxClass:Class = getDefinitionByName( AchievementPanelGfx ) as Class;
var achiGfx:ISkinElement = new GfxClass();
trace( achiGfx ); // return is null
 
var a:* = new GfxClass();
trace( a is ISkinElement ); // returns false
 
trace( describeType( getDefinitionByName( GfxClass ) ) ); // содержит <implementsInterface type="gfx.base::ISkinElement"/>

При чём, если грузить libs.swf локально, то всё работает!

gloomyBrain 20.05.2011 14:26

Залейте обе флешки на сервер и потестите - по идее, должно начать работать. Вероятная причина в том, что несмотря на одинаковые названия, эти интерфейсы попадают в разные SecurityDomain'ы (основной - local, а загружаемый - remote). То есть для флеша это 2 разных интерфейса

Xpb7 20.05.2011 14:42

Когда они обе на сервере, то всё работает. Но это не выносимо для работы, ибо в процессе разработке я компилю локально. Есть ли варианты устроить всё так, чтобы и локально всё работало так же как в вебе?

gloomyBrain 20.05.2011 14:47

конечно есть - грузите с локала, кто мешает?

nOobCrafter 20.05.2011 14:50

gloomyBrain +1
Xpb7 была та же проблема, компилил локально а грузил с нета, не совпадали типы, пришлось все делать локально а потом просто в нет выкладывать, тогда феншуй, то есть если компилим локально то грузим локальные файлы, если флешка в нете то и грузит файлы оттуда же.

Xpb7 20.05.2011 14:51

На самом деле этим костылём и пользуемся, просто хотелось бы более интеллигентное решение. То есть эти Security Domain-ы никак не обмануть совместить?

wvxvw 20.05.2011 14:54

Я в итоге остановился на варианте - работать с веб сервером на локальной машине. Т.как есть куча всевозможных вещей, которые не будут, или будут, но не совсем так работать с локальной файловой системой. И если проект планируется только для веба, это очень неудобно держать 2 конфигурации, из которых одна только для локального тестирования.
В итоге из разных серверов для имитации настоящего сервера остановился на Hunchentoot - т.как мне это ближе, но самое тривиальное решение для Windows - наверное IIS (есть шанс, что у вас уже установлен даже, нужно просто включить), или Apache - будет работать где угодно, не только в Windows.

Xpb7 20.05.2011 15:02

Всем спасибо большое! Wvxvw, на досуге попробую разобраться как это всё поставить/настроить.

gloomyBrain 20.05.2011 15:29

Цитата:

это очень неудобно держать 2 конфигурации, из которых одна только для локального тестирования
Ну не знаю. Если собирать антом, то все собранное можно отгружать на FTP, при этом оставляя копию и на локале. + конфиги компиляции и дело в шляпе =)
По крайней мере у меня обычно не так много мест, в которых перечислены URL-адреса для загрузки ресурсов

dimarik 20.05.2011 18:24

Костылики можно прикрутить )


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

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