あるswf(この場合はflex)から別のランタイムロードされたfla.swfにパラメーターを渡すにはいくつかの可能性があります。
1.読み込みクエリパラメータを渡します。
flex.swfのコード:
public function astest()
{
var loader:Loader = new Loader();
addChild(loader);
loader.load( new URLRequest("astest1.swf?param1=value1¶m2=value2"));
}
fla.swfからパラメータにアクセスします。
public function astest1()
{
if(stage)
onAdded();
else
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
protected function onAdded(event:Event = null):void
{
//root.loaderInfo.parameters - params of this swf file
//stage.loaderInfo.parameters - params of core swf file
var params:Object = root.loaderInfo.parameters;
for (var param:String in params)
trace(param,"=",params[param]);
}
出力:
param2 = value2
param1 = value1
この方法の欠如:
-1回の使用で、ロード時にparamsを1回だけ渡すことができます
-2番目のswfはurlによってランタイムロードされる必要があります。たとえば、それ(またはそれを含むクラスの1つ)を埋め込むことはできません。
2.イベントを介した実行時の通信
この方法を使用することをお勧めします。以前の方法が不足しているわけではありません。
ステージをグローバル共通ディスパッチャとして使用する例。
flex.swf:
public function astest()
{
addEventListener("ready", onReady);
var loader:Loader = new Loader();
addChild(loader);
loader.load( new URLRequest("astest1.swf"));
}
protected function onReady(event:Event):void
{
sendParams("param1=value1¶m2=value2");
}
protected function sendParams(params:String):void
{
stage.dispatchEvent(new DataEvent("params", false, false, params));
}
fla.swf:
public function astest1()
{
if(stage)
onAdded();
else
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
protected function onAdded(event:Event = null):void
{
stage.addEventListener("params", onParams);
//fire event with bubbling that anables handling it in the parent swf
dispatchEvent(new Event("ready", true));
}
protected function onParams(event:DataEvent):void
{
var data:String = event.data;
trace(data);
}
出力:
param1=value1¶m2=value2
このアプローチでは、必要な数のパラメーターを送信し、オブジェクトパラメーターを渡すカスタムイベントを作成することもできますが、この場合、両方のプロジェクトのソースパスにこのcusomイベントが含まれている必要があります。