我正在研究Air for Android应用程序的原型,它可以加载一些远程swf文件(全部由我创建和控制),我需要能够将变量传递给远程SWF。
以下是该流程当前工作原理的快速细分:
现在,到目前为止,这么好。远程SWF视频加载并完美播放。但我需要开始从Player.swf(从XML响应中提取)中获取变量以在远程SWF中使用(诸如文本字符串,用户ID等)
从我所做的所有搜索中,我认为这取决于Sandbox环境,因为Loader是一个已编译的应用程序,而Player.swf +远程SWF都是从服务器上下载的。但是,现在我想知道,因为Player.swf是具有处理XML响应的AS3代码的那个,并且它与播放的远程SWF位于同一服务器上(因此应该是相同的沙箱? )
我能够使用URL参数传递变量,但它只在本地工作,而不是在我使用Android应用程序时。
我发现了一个关于Sandbox Bridges的旧博客,但示例文件下载不再适用。
任何人都可以指出我在使用parentSandboxBridge函数/类传递变量的正确方向(我看到的所有示例都处理传递函数和/或为Flex编码)
我无法发布任何代码,因为我根本无法展示我想要达到的目标(我完全被这一点困扰了!)
编辑:我设法获取参数传递(即使它之前在本地工作,它也不适用于Loader app> Remote Player> Remote SWF动画组合)我必须在Player.swf中设置应用程序域上下文(因为它与远程swf动画位于同一服务器上,不知道为什么我需要这样做)
但奇怪的是,我不能使用父或根来获取变量?
答案 0 :(得分:0)
我在运行Android 2.2.2的HTC Desire上进行了测试,它的作用与我的评论相符,因此答案如下:)
您的主机需要定义类似的内容:
var params:URLVariables = new URLVariables();
params["string"] = "ala ma kota";
params["number"] = 1979;
var request:URLRequest = new URLRequest();
request.data = params;
request.url = "urlVarsReader.swf";
var loader:Loader = new Loader();
loader.load(request);
addChild(loader);
然后加载的内容(此处为urlVarsReader.swf)可以按如下方式读取它们:
var output:TextField = new TextField();
addChild(output);
output.border = true;
output.width = 320;
output.height = 240;
output.wordWrap = true;
output.multiline = true;
var p:Object = getParams(this.loaderInfo);
for (var name:String in p)
{
output.appendText(name + " = " + p[name] + "\n");
}
我有一个读取params的包装器方法:
public function getParams(li:LoaderInfo):Object
{
try
{
var params:Object = li.parameters;
var pairs:Object = {};
var key:String;
for(key in params)
{
pairs[key] = String(params[key]);
}
}
catch(e:Error)
{
return {error:e.getStackTrace()};
}
return pairs;
}
最好的问候
编辑:
仅适用于本地内容失败的SecurytyError,例如SecurityError:错误#2070:安全沙箱冲突:调用者http://example.com/urlVarsReader.swf?string=ala%20ma%20kota&number=1979无法访问app所拥有的Stage:/loadwithparams.swf