0

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

以下是该过程当前工作方式的快速分解:

  • 名为 Loader 的 Android 应用程序安装在设备上。
  • Loader 指向我的服务器并找到 Player.swf,并将其加载到主阶段。Player.swf 显示登录屏幕。
  • 当用户正确登录时,Player.swf 会收到来自 API 的 XML 响应,其中包含要为用户显示的远程 SWF 视频列表。Player.swf 循环遍历 XML 列表并一个接一个地播放每个远程 SWF。

现在,到目前为止,一切都很好。远程 SWF 视频加载并完美播放。但我需要开始从 Player.swf 中获取变量(从 XML 响应中提取)以在远程 SWF 中使用(例如文本字符串、用户 ID 等)

从我所做的所有搜索来看,我相信这取决于沙盒环境,因为 Loader 是一个已编译的应用程序,而 Player.swf + 远程 SWF 都来自服务器。但是,现在我想知道,因为 Player.swf 是具有处理 XML 响应的 AS3 代码的那个,并且与播放的远程 SWF 位于同一服务器上(因此应该是同一个沙箱? )

我能够使用 URL 参数传递一个变量,但它只能在本地工作,而不是在我使用 Android 应用程序时。

我找到了一个关于 Sandbox Bridges 的旧博客,但是示例文件下载不再起作用。

谁能指出我使用 parentSandboxBridge 函数/类传递变量的正确方向(我见过的所有示例都处理传递函数和/或为 Flex 编码)

我不能发布任何代码,因为我没有什么可以展示我想要实现的目标(我完全被这点难住了!)

编辑:我设法获取要传递的参数(即使它以前在本地工作,但它不适用于 Loader 应用程序 > 远程播放器 > 远程 SWF 动画组合)

我必须在 Player.swf 中设置应用程序域上下文(因为它与远程 swf 动画在同一台服务器上,不知道为什么我需要这样做)

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

4

1 回答 1

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");
        }

我有一个读取参数的包装方法:

    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无法访问应用程序拥有的阶段:/加载参数.swf

于 2012-11-29T12:24:13.190 回答