AS3将FlashVars传递给加载的swf

时间:2010-02-20 15:54:40

标签: actionscript-3 flashvars

我有一个A.swf,它将B.swf加载到一个movieclip上,需要传递一些FlashVars。使用html加载B.swf时,我可以正常传递FlashVars。当从A.swf传递时,它会得到一个

错误#2044:未处理的ioError: text =错误#2032:流错误。网址:文件:

A.swf中的代码是

var request:URLRequest = new URLRequest ("B.swf");

var variables : URLVariables = new URLVariables();
variables.xml = "test.xml";

// This line causes the error 2044, else B.swf loads fine with FlashVars  
request.data = variables;

loader.load (request); 

在B.swf中,它正在检查Flashvars。它从html端正常工作

this.loaderInfo.parameters.xml

4 个答案:

答案 0 :(得分:17)

尽管querystring方法在本地工作正常,但如果你使用的是Flash Player 10.2,那么就有一个新的API。

var context:LoaderContext = new LoaderContext();
context.parameters = {'xml': 'test.xml'};
loader.load(request, context);

文档在这里: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#parameters

答案 1 :(得分:2)

“A”没有必要将FlashVars传递给“B”。让B访问FlashVars本身。无论B是在A内部还是顶层本身,以下内容都有效:

在B的构造函数中添加ADDED_TO_STAGE事件侦听器。 e.g:

function B(){
    this.addEventListener(Event.AddedToStage, onAddedToStageHandler);
}

当您有权访问舞台时,您现在可以通过以下方式访问FlashVars:

要在B.swf中正确查看名为myVar flashVar的变量,您可以(在B内):

private function onAddedToStageHandler(){
var flashVars : Object = LoaderInfo(this.stage.loaderInfo).parameters;
// now you have access to your flashVars!
trace(flashVars.myVar);
}

stage.loaderInfo是您需要关注的内容。

答案 2 :(得分:0)

您可以在加载时将flash变量添加到URI中

URLRequest(String("B.swf" + "?myvar=45"));

问题是当你在uri中加载字符串时,它被放在一个Object loaderInfo.parameters里面,所以如果你想传递这些参数,你需要创建一个字符串来传递它们。

这是来自http://ragona.com/blog/pass-flashvars-loaded-swf/的脚本,它显示了如何将其转换为字符串数组

//:: Store loader info
var lInfo:Object = this.root.loaderInfo.parameters;
//:: Flashvars
var fVars:String = "?whee=nada"; //:: Getting the syntax change (? --> &) out of the way with a dummy var

//:: Set path + data
for (var flashVar in lInfo)
{
    fVars += "&" + flashVar + "=" + lInfo[flashVar];
}

var myRequest:URLRequest = new URLRequest(String("/myPath.swf" + fVars));

答案 3 :(得分:0)

如何沙箱权限?我尝试通过设置添加文件夹,但这也不起作用。

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

我做了一个简单的新项目。这是完整的代码。

var mc:MovieClip = new MovieClip ();

var loader:Loader = new Loader ();
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, OnComplete);

var request:URLRequest = new URLRequest ("B.swf"); 

var variables : URLVariables = new URLVariables(); 
variables.xml = "test2.xml"; 

// This line causes the error 2044, if i comment out, it runs fine without FlashVars   
request.data = variables; 

loader.load (request);  


function OnComplete (e:Event)
{
    trace ("On Complete");
    mc = e.currentTarget.content as MovieClip;
    addChild (mc);
}