7

我有一个 A.swf,它将 B.swf 加载到一个影片剪辑上,并且需要将一些 FlashVars 传递给它。用 html 加载 B.swf 时,我可以很好地传递 FlashVars。从 A.swf 传递时,它得到一个

错误 #2044:未处理的 ioError:。文本=错误 #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

4 回答 4

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

于 2011-03-19T21:07:45.833 回答
2

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

在 B 的构造函数中添加一个 ADDED_TO_STAGE 事件监听器。例如:

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

当您可以访问舞台时,您现在可以通过以下方式访问 A 中的 FlashVar:

要在 B.swf 中正确查看名为myVarflashVar 的变量,请执行以下操作(在 B 内):

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

stage.loaderInfo是你需要看的。

于 2011-10-17T16:45:55.330 回答
0

您可以在加载时将 flash vars 添加到 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));
于 2010-02-20T16:31:52.420 回答
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);
}
于 2010-02-22T08:37:58.487 回答