Форум 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=134138)

fiar 22.12.2009 16:05

Сторонний swf
 
Здравствуйте, я наверное чего то недопонимаю и не знаю...

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

Вот кусок кода:
main.SERVER = "../resources";
Код AS3:

                public function Entity(url:String) {
                        _loader = new Loader();
                        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onComplete);
                        this.url = url;
                }
 
                /** function load
                */

                public function load() : void {
                        _loader.load(new URLRequest(main.SERVER + "/" + url));
                }
 
                /** function _onComplete
                */

                private function _onComplete(event:Event) : void {
                        var mm:IMainMenu = IMainMenu(_loader.content);
                        dispatchEvent(new Event(COMPLETE));
                }

Далее установил Денвер и сделал локальный сервер, теперь main.SERVER = "http://tdserver.tmp/resources";
, но в такой ситуации вылетает ошибка
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать ext::MainMenuEx@7f10d81 в ext.IMainMenu.

Как с этим бороться?

Wolsh 22.12.2009 22:49

Ничего удивительного. Как можно преобразовать Класс в Интерфейс? Возможно, Вы имели в виду
Код AS3:

var mm:IMainMenu = _loader.content as IMainMenu;


udaaff 23.12.2009 00:00

Цитата:

Сообщение от Wolsh (Сообщение 874411)
Ничего удивительного. Как можно преобразовать Класс в Интерфейс? Возможно, Вы имели в виду
Код AS3:

var mm:IMainMenu = _loader.content as IMainMenu;


По моему тут ничего криминального нету. Интерфейс также как и класс определяет тип объекта и такой кастинг вполне уместен. Надо проверить все же =)

fiar, ваш _loader.content реализует этот интерфейс?

fiar 23.12.2009 10:20

Цитата:

Сообщение от Wolsh (Сообщение 874411)
Ничего удивительного. Как можно преобразовать Класс в Интерфейс? Возможно, Вы имели в виду
Код AS3:

var mm:IMainMenu = _loader.content as IMainMenu;


Если так, то возвращает null (если клип в локальной папке, то всё ок)


Цитата:

Сообщение от udaaff (Сообщение 874426)
fiar, ваш _loader.content реализует этот интерфейс?

Я немного не допонимаю, что там кого реализует...?

У меня в загружаемой флеш базовый класс наследуется(реализует члены) от интерфейса IMainMenu, в этом случае при локальной загрузке никаких ошибок.


У меня проблема вовсе не в привидении типов, а в том что флеш загружается со стороннего сервера (домена).

dimarik 23.12.2009 10:53

Security domain

udaaff 23.12.2009 11:05

Цитата:

Сообщение от dimarik (Сообщение 874473)

По идее, тогда бы была ошибка "Нарушение изолированной среды" а не
Цитата:

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать ext::MainMenuEx@7f10d81 в ext.IMainMenu.

dimarik 23.12.2009 11:07

И еще. У Вас не получится загрузить удаленную swf в тот же security domain, в котором лежат классы загрузчика, если загрузчик в песочнице с префиксом local.
Т.е. удаленная swf не может использовать definitions локальной swf.
Ваш выбор - нетипизированное обращение к методам и свойствам Loader#content'а.

Добавлено через 4 минуты
Ошибка типа Coercion указывает на то, что теперь в приложении два разных IMainMenu с одинаковам именем. Находятся они соответственно в ApplicationDomain.currentDomain (у загрузчика) и в неком application domain, находящемся в отдельном security domain (у загруженной).

fiar 23.12.2009 11:39

Вообщем IMainMenu пока закомментировал.

Возникло следующее: если главная и загружаемая флеш на одном сервере, то грузится, а если флеш запускается локально или со второго, то Error #2044: Необработанный SecurityErrorEvent:. text=Error #2048: Нарушение изолированной среды: http://tdserver2.com/main.swf не может загрузить данные из http://tdserver.com/resources/MainMenu.swf.

dimarik 23.12.2009 11:54

Либо crossdomain.xml, либо Loader#loadBytes(URLLoader#data)

fiar 23.12.2009 12:39

Всем спасибо за ответы.
crossdomain помог, всё работает, вроде разобрался, остальное сам доковыряю.


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

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