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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.08.2012, 20:18
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 11  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Если подгружаемая SWF имеет другой ApplicationDomain то интерфейс не прокатит, пока приложение не будет загружено в тот же домен
Смелое утверждение.
IPlugin.as :
Код AS3:
package  
{
	public interface IPlugin 
	{
		function setPosition(x:Number, y:Number):void;
	}
}
Main2.as >> Plugin.swf DocumentClass :
Код AS3:
package  
{
	import flash.display.Sprite;
 
	public class Main2 extends Sprite implements IPlugin 
	{
		public function Main2() { }
 
		/* INTERFACE IPlugin */
		public function setPosition(x:Number, y:Number):void 
		{
			trace("x: ", x, ",  y: ", y);
		}
	}
}
Main.as :
Код AS3:
package 
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import IPlugin;
 
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			var swfloader:Loader = new Loader();
			swfloader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			swfloader.load(new URLRequest("Plugin.swf"));
		}
 
		private function completeHandler(event:Event):void 
		{
			var plugin:IPlugin = event.target.loader.content as IPlugin;
			trace("Plugin: ", plugin);
			plugin.setPosition(10, 15);
			trace(this.loaderInfo.applicationDomain == event.target.loader.content.loaderInfo.applicationDomain); /// output: false
		}
	}
}
__________________
Reality.getBounds(this);

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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Похоже здесь ближе всех к истине оказался gloomyBrain, но речь о песочнице
applicationDomain для этого тоже нужен.
Вот, нашел реальный пример из одного своего приложения:
Код AS3:
if (Security.sandboxType == Security.REMOTE) {
	var context:LoaderContext = new LoaderContext();
	context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
	loader.loadBytes(byteArray, context);
}
Если грузить без контекста, и потом проверить интерфейсы загруженной флешки, то, несмотря на то, что интерфейс прменяется тот же, такой код:
Код AS3:
trace(loadedItem is IControllable); // выдаст false
с контекстом, выдаст true

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Но если обе флэшки лежат на одном домене — проблем нет.
Файлы те же, только код обработчика поменял на вывод в текстфилд
Код AS3:
private function completeHandler(event:Event):void 
{
	var plugin:IPlugin = event.target.loader.content as IPlugin;
 
	var txt:TextField = new TextField();
	addChild(txt);
	txt.x = 100, txt.y = 100;
	txt.width = 500;
	txt.height = 500;
	txt.text = (plugin != null) ? " IPlugin" : " null";
	txt.appendText("\n Security sandbox is REMOTE: " + (Security.sandboxType == Security.REMOTE).toString());
	txt.appendText("\n Plugin: " + (plugin as Object).toString());
	txt.appendText("\n Plugin is IPlugin: " + (plugin is IPlugin).toString());
	txt.appendText("\n applicationDomain равны? : " + (this.loaderInfo.applicationDomain == event.target.loader.content.loaderInfo.applicationDomain).toString());
	plugin.setPosition(10, 15);
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 24.08.2012 в 11:58. Причина: добавил пример
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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