将参数从一个 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
缺乏这种方法:
- 一次使用,加载时只能传递一次参数
- 第二个 swf 必须在运行时通过 url 加载,例如,不能嵌入它(或包含它的类之一)。
2.通过事件的运行时通信
我推荐使用这种方法,它不缺乏前一种。
使用 stage 作为全局公共调度程序的示例。
弹性.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
使用这种方法,您可以根据需要发送尽可能多的参数,您还可以创建自定义事件来传递对象参数,但在这种情况下,两个项目都必须在源路径中具有此自定义事件。