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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.10.2012, 14:49
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 1  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
По умолчанию Несовместимость абсолютно одинаковых интерфейсов

Доброго времени суток.
В основной проект я подгружаю флешку, в которой содержится mxml элемент класса TextTool (единственный такой элемент), который implements="IModule"
Код AS3:
package 
{
	import mx.core.UIComponent;
	public interface IModule 
	{
		function getIcons():UIComponent;
	}	
}
Этот интерфейс присутствует как в главном проекте, так и в подгружаемом , находится прямо в корне проектов. При компиляции загружаемого проекта ошибки нет - TextTool правильно использует интерфейс.
В главном проекте, после подгрузки флэшки я достаю этот TextTool и смотрю если он подходит к интерфейсу IModule:
Код AS3:
trace(getQualifiedClassName(mySwf.getChildByName('textModule')['myTF']));       //stark::TextTool
trace(mySwf.getChildByName('textModule')['myTF'] is IModule);                        //false
Почему так?


Последний раз редактировалось AlexLucas; 30.10.2012 в 19:34.
Старый 19.10.2012, 14:58
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Потому что надо грузить в одну песочницу
в контекст загрузки надо указать тот же applicationDomain домен, что и у подгружающей флешки
Код AS3:
if (Security.sandboxType == Security.REMOTE) {
	var context:LoaderContext	= new LoaderContext();
	context.applicationDomain	= new ApplicationDomain(ApplicationDomain.currentDomain);
}
ну и указать этот контекст загрузчику. Тогда будет работать.

Старый 19.10.2012, 16:20
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 3  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Я гружу локальный свф, так что подставил
Код AS3:
Security.sandboxType == Security.LOCAL_TRUSTED
Вот весь код
Код AS3:
var url:URLRequest = new URLRequest("../src/components/TextTool.swf");
		var ldr:SWFLoader = new SWFLoader(); 
		var context:LoaderContext	= new LoaderContext();
		if (Security.sandboxType == Security.LOCAL_TRUSTED) {
			context.applicationDomain	= new ApplicationDomain(ApplicationDomain.currentDomain);
			trace('here');
		}
 
		ldr.source = "../src/components/TextTool.swf";
		ldr.loaderContext = context;
		ldr.addEventListener(Event.COMPLETE, onLoadComplete);
		ldr.load();
Проверка на совместимость с интерфейсом всё так же false.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не может этого быть. Значит проблема с самим интерфейсом. У него точно такой же пакет? Такое же название? Такой же набор методов? Та же область видимости?

Старый 19.10.2012, 17:30
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
trace(mySwf.getChildByName('textModule')['myTF'] is IModule);
ЭЭЭ...

Код AS3:
trace(mySwf.getChildByName('textModule') is IModule);
maybe?
__________________
Марк Tween

Старый 19.10.2012, 18:05
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 6  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Не может этого быть. Значит проблема с самим интерфейсом. У него точно такой же пакет? Такое же название? Такой же набор методов? Та же область видимости?
Код скопипастил, и там и там интерфейс в корне проекта, название то же. Уже много раз проверял.
Всё логично но не получатеся :*(

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<!-- мэйн класс подгружаемого модуля  -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
		xmlns:stark="stark.*" name="textModule" >    
		<stark:TextTool name="myTF" id="myTF"></stark:TextTool>
    </s:Application>
А TextTool это мой кастомный класс который имплементит IModule. Так что myTF должен быть is IModule

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
xmlns:fx="http://ns.adobe.com/mxml/2009"
пространство имен в подгружающей флешке такое же?

Старый 19.10.2012, 18:23
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 8  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Да, такое же.

Старый 19.10.2012, 21:19
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
new ApplicationDomain(ApplicationDomain.currentDomain);
Это разве тот же домен?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 19.10.2012, 21:33
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от GBee Посмотреть сообщение
Код AS3:
new ApplicationDomain(ApplicationDomain.currentDomain);
Это разве тот же домен?
Кэп говорит - нет.

Попробуйте затестить с этим:
Код AS3:
context.applicationDomain = ApplicationDomain.currentDomain;

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

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

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


 


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


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