Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подгружаемый swf и общий интерфейс (http://www.flasher.ru/forum/showthread.php?t=137981)

NewFolder 27.03.2010 02:53

Подгружаемый swf и общий интерфейс
 
Есть две swf'ки: main.swf подгружает test.swf
Они обе подключают один и тот же интерфейс ITransition
Document Class файла test.swf реализует этот интерфейс
Когда я подгружаю его в main.swf и пытаюсь конвертировать в ITransition, то получаю null
Перепробовал все варианты ApplicationDomain в LoaderContext - ничего не помогло

Main.as
Код AS1/AS2:

package {
        ...
 
        import transitions.ITransition;
 
        public class Main extends Sprite {
                protected var _loader:Loader;
                protected var _transition:ITransition;
 
                protected function onSWFLoaded(e:Event = null):void {                       
                        initLoader();
                        _loader.load(new URLRequest("test.swf"));
                }               
 
                //Once file is successfully loaded
                protected function loadComplete(e:Event):void {
                        trace(_loader.content as ITransition);//Выдает null, а мне нужен объект
                }
 
                //Once load error happened
                protected function loadError(e:*):void {
                        //ERROR
                }               
 
                //Destroys old object and creates new one
                protected function initLoader():void {
 
                        //Destroy old loader object
                        if (_loader) {
                                _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
                                _loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loadError);
                                _loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, loadError);
                                _loader = null;
                        }
 
                        //Init the new loader
                        _loader = new Loader();
                        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
                        _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);
                        _loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadError);
                }
        }       
}

Test.as
Код AS1/AS2:

package {
        ...       
        import transitions.ITransition;
 
        public class Test extends Sprite implements ITransition {
 
                //Constructor
                public function TestTransition() {
 
                }
 
                public function start():void {
                        trace("Started");                       
                }
 
        }
 
}


ratin 27.03.2010 04:02

http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f41.html
Вы не можете _создать интерфейс, и тем более его загрузить, вы лишь можете его реализовать. Естественно, на этапе компиляции.


upd: сорри, не увидел ночью, что вы подключаете ITransition к обоим флешкам 0_о

Котяра 27.03.2010 10:44

Цитата:

Сообщение от ratin (Сообщение 896049)
Вы не можете _создать интерфейс, и тем более его загрузить, вы лишь можете его реализовать. Естественно, на этапе компиляции.

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

trace(_loader.content );

заведите только метод toString. может проблема не в касте?

ratin 27.03.2010 13:09

Цитата:

Сообщение от Котяра (Сообщение 896072)
Не надо умничать.. лучше сами почитайте.

Не надо хамить, ага?

NewFolder 27.03.2010 20:17

Цитата:

Сообщение от Котяра (Сообщение 896072)
Не надо умничать.. лучше сами почитайте.
Всё нормально загружается.. более того интерфейсы для этого и нужны чтобы скастовать классы из разных доменов.
по сабжу.. на первый взгляд ничего подозрительного не вижу..попробуйте просто
Код AS3:

trace(_loader.content );

заведите только метод toString. может проблема не в касте?

мне нужно что-то типа такого
Код AS3:

_transition = _loader.content as ITransition;

если я сделаю, как вы говорите, то флеш даже не скомпилируется
Код AS3:

_transition = _loader.content;

1067: Implicit coercion of a value of type flash.display:DisplayObject to an unrelated type transitions:ITransition.

Котяра 27.03.2010 20:50

я имел в виду проверить - а загрузился ли сам класс и проиницализировался ли он? может попробовать на событие INIT? а не COMPLETE? не могу сейчас сам проверить.

NewFolder 27.03.2010 21:09

В общем, проблема была в том, что я тестировал прям во флеше, а грузил файлы с локального сервера. Получилось, что у swf'ок были разные домены.

Так же нашел решение для кроссдоменных загрузок http://blog.aleksandarandreev.com/?p=42

Котяра 29.03.2010 10:37

ага.
Код AS3:

var loader:Loader = new Loader();
var addedDefinitions:LoaderContext = new LoaderContext();
addedDefinitions.checkPolicyFile = true;
addedDefinitions.securityDomain = SecurityDomain.currentDomain;
addedDefinitions.applicationDomain = ApplicationDomain.currentDomain;
var request:URLRequest = new URLRequest(myUrl);
loader.load(request, addedDefinitions);


dimarik 29.03.2010 13:02

@Котяра
Не, не получится. У NewFolder

Цитата:

я тестировал прям во флеше
читай local-trusted sandbox.

Цитата:

а грузил файлы с локального сервера.
remote sandbox.

В такой ситуации использовать импортирующую загрузку, указав SecurityDomain запрещено.


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

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