【问题标题】:AS3 Air for Android [Error 2070] - Remotely loaded SWF cannot access Stage from AppAS3 Air for Android [错误 2070] - 远程加载的 SWF 无法从应用程序访问 Stage
【发布时间】:2012-11-07 09:17:39
【问题描述】:

我正在构建一个 Air for Android (AS3) 应用程序,它将加载远程 swf 文件(位于我的服务器上)

我们的想法是尽可能简化 apk 以实现快速部署(将私下部署,而不是通过 Google Play 部署)

  • apk 被称为 Loader
  • 远程 swf 称为播放器。

现在,当我启动 Loader 时,播放器抛出此错误:

SecurityError:错误 #2070:违反安全沙箱:调用方 http://sub.mydomain.com/remote/player.swf 无法访问 app:/Loader.swf 拥有的 Stage。

这很奇怪,因为 Player 没有尝试调用 Loader 阶段 - 我告诉玩家创建一个名为“_stage”的新阶段,代码如下:

var playerContainer:MovieClip = new MovieClip();
var _stage:Stage = playerContainer.stage;

使用:

_stage.stageWidth

访问舞台宽度。

我不知道为什么 Loader 认为 Player 试图访问它的舞台属性?

我已经尝试过在各种论坛帖子中提到的以下代码,但似乎没有任何东西可以缓解安全域的问题:

在加载器中

try {Security.allowDomain("*");}catch (e) { };

在播放器中

Security.allowDomain("http://sub.mydomain.com");

还有在 Player 中,用于我的 init() 函数

addEventListener(Event.ADDED_TO_STAGE, displayLogin);

这些都没有帮助。

我完全不知所措。如何让 Loader 允许 Player 访问它的舞台属性,这让我很头疼。

编辑 - 当两个 swf 文件都在服务器上时,我通过浏览器访问 Loader,而不是使用 android 应用程序,它可以正常加载。绝对是跨脚本的问题,但在我看来,我有所有正确的代码来允许这样做?

【问题讨论】:

    标签: android actionscript-3 flash air


    【解决方案1】:

    巴勃罗, 首先,如果它将项目添加到舞台而不是访问舞台属性,也许您应该将 player.swf 下载到 SDCard 或应用程序本地存储并从那里加载?然后您可以设置过期日期,之后您将重新加载 player.swf?

    Here is the link to other SO Question about storing remote file on SDCARD

    【讨论】:

    • 您能否指出如何将播放器下载到本地存储并嵌入而不是远程文件?
    猜你喜欢
    • 2012-03-09
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多