Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 需要将变量传递给远程swf_Android_Actionscript 3_Flash - Fatal编程技术网

Android 需要将变量传递给远程swf

Android 需要将变量传递给远程swf,android,actionscript-3,flash,Android,Actionscript 3,Flash,我正在开发一个Air for Android原型应用程序,该应用程序加载一些远程swf文件(所有文件都由我创建和控制),我需要能够将一个变量传递给远程swf 下面是该流程当前工作方式的快速分解: Android应用程序名为Loader,安装在设备上 Loader指向我的服务器并找到Player.swf,它将其加载到主阶段。Player.swf显示登录屏幕 当用户正确登录时,Player.swf将从API接收XML响应,其中包含要为用户显示的远程swf视频列表。swf在XML列表中循环并逐个播放

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

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

  • Android应用程序名为Loader,安装在设备上
  • Loader指向我的服务器并找到Player.swf,它将其加载到主阶段。Player.swf显示登录屏幕
  • 当用户正确登录时,Player.swf将从API接收XML响应,其中包含要为用户显示的远程swf视频列表。swf在XML列表中循环并逐个播放每个远程swf
现在,到目前为止,一切都很好。远程SWF视频加载并完美播放。但是我需要开始从Player.swf(从XML响应中提取)中提取变量,以便在远程swf中使用(比如文本字符串、用户ID等)

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

我可以使用URL参数传递一个变量,但它只在本地起作用,在我使用Android应用程序时不起作用

我发现了一个关于沙箱桥的老博客,但是示例文件下载不再有效

在使用parentSandboxBridge函数/类传递变量时,有人能给我指出正确的方向吗(我看到的所有示例都涉及传递函数和/或为Flex编写的代码)

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

编辑:我设法获得了要传递的参数(尽管它以前在本地工作过,但它不能与Loader app>Remote Player>Remote SWF动画组合一起工作)

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


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

我已经在运行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:Error#2070:Security sandbox违规:调用方无法访问app所拥有的阶段:/loadwithparams.swf

您能展示一下您是如何尝试的吗?如果您正在将另一个SWF加载到主SWF中,则URLRequest的数据对象可以用URLVariables填充,并传递给Loader的load方法。感谢您的输入。你试过远程服务器上托管的urlsvaread.swf吗?还记得,我的android应用程序正在加载一个远程swf,它会加载更多的远程swf。App>swf(这一个提供变量)>swf(这一个需要拾取它)很遗憾无法加载它:(我在谷歌上搜索过,人们建议使用HTMLLoader/StageWebView或将其作为ByteArray加载。如果你看到我的帖子编辑,你可以看到我的参数在hosted player.swf和远程动画之间工作,但是使用applicationdomain上下文(我知道这很奇怪,因为它们都在同一台服务器上)添加“try{Security.allowDomain(”;}catch(e){和“try{Security.allowInsecureDomain(”);}catch(e){};”添加到应用程序中,并将“Security.allowDomain(”)和“Security.allowInsecureDomain(”)添加到HSF中