需要将变量传递给远程swf

时间:2012-11-29 11:16:19

标签: android actionscript-3 flash

我正在研究Air for Android应用程序的原型,它可以加载一些远程swf文件(全部由我创建和控制),我需要能够将变量传递给远程SWF。

以下是该流程当前工作原理的快速细分:

  • Android应用程序名为Loader,已安装在设备上。
  • Loader指向我的服务器并找到它加载到主舞台的Player.swf。 Player.swf显示登录屏幕。
  • 当用户正确登录时,Player.swf会从API接收XML响应,其中包含要为用户显示的远程SWF视频列表。 Player.swf循环遍历XML列表并一个接一个地播放每个远程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动画位于同一服务器上,不知道为什么我需要这样做)

但奇怪的是,我不能使用父或根来获取变量?

1 个答案:

答案 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