Добрый день!
Возник следующий вопрос. Нужно передать данные из основной swf в подгружаемую и обратно через интерфейс. В подгружаемую получается передать через интерфейс, а вот в основную только через dispatchEvent.
Как через интерфейс передать данные в основную swf с подгружаемой? И возможно ли это?
Основная swf:

Код AS3:
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.system.Security;
import flash.system.SecurityDomain;
public class DataExchange extends Sprite implements ITextTrace
{
private var loader:Loader;
private var loader2:Loader;
private var mc:MovieClip;
private var mc2:MovieClip;
public var context:LoaderContext = new LoaderContext();
public function DataExchange()
{
loadSWF();
}
private function loadSWF():void
{
var request:URLRequest = new URLRequest("res/field.swf");
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleate);
loader.load(request);
}
private function onLoadCompleate(event:Event):void
{
var Field:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('field') as Class;
mc = new Field();
mc.addEventListener(MouseEvent.CLICK, onClick);
addChild(mc);
}
private function onClick(event:MouseEvent):void
{
if(Security.sandboxType == Security.REMOTE){
context.securityDomain = SecurityDomain.currentDomain
}
var request:URLRequest = new URLRequest("res/LoaderData.swf");
loader2 = new Loader();
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleate2);
loader2.load(request);
}
private function onLoadCompleate2(event:Event):void
{
addChild(loader2);
loader2.content.addEventListener("CLOSE", onExternalClick);
//передаём из основной флешки в подгружаемую
(loader2.content as ITextTrace).textTrace("from");
}
protected function onExternalClick(event:Event):void
{
textTrace("for");
}
public function textTrace(str:String):void {
trace(str);
}
}
}
подгружаемая:

Код AS3:
package
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.system.LoaderContext;
import flash.system.Security;
import flash.system.SecurityDomain;
public class LoaderData extends Sprite implements ITextTrace
{
[Embed('res/field2.swf', mimeType='application/octet-stream')]
private var Field2:Class;
private var loader:Loader;
private var mc:MovieClip;
public var context:LoaderContext = new LoaderContext();
public function LoaderData()
{
Security.allowDomain("*");
context.securityDomain = SecurityDomain.currentDomain
loadSWF();
}
private function loadSWF():void
{
var swfClassField2:Class = Field2;
var loaderField2:Loader = new Loader();
loaderField2.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInitRoom);
loaderField2.loadBytes(new swfClassField2);
}
private function onLoaderInitRoom(event:Event):void
{
var field2LI:LoaderInfo = LoaderInfo(event.currentTarget);
field2LI.removeEventListener(Event.INIT, onLoaderInitRoom);
var Field:Class = field2LI.applicationDomain.getDefinition('field2') as Class;
mc = new Field();
addChild(mc);
mc.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(event:MouseEvent):void
{
removeChild(mc);
//передаём из подгружаемой в основную
dispatchEvent(new Event("CLOSE"));
//так ничего не передаёться
ITextTrace(this).textTrace("for");
}
public function textTrace(str:String):void {
trace(str);
}
}
}
интерфейсы:

Код AS3:
package
{
public interface ITextTrace
{
function textTrace(str:String):void;
}
}