适用于Android的AS3 Air [错误2070] - 远程加载的SWF无法从App访问Stage

时间:2012-11-19 12:39:11

标签: android actionscript-3 flash air

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

我们的想法是让apk尽可能保持流畅,以便快速部署(将私下部署,而不是通过Google Play部署)

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

现在,当我启动Loader时,Player正在抛出此错误:

  

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

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

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

使用:

_stage.stageWidth

访问舞台宽度。

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

我已经尝试了以下各种论坛帖子中提到的代码,但似乎没有什么可以缓解安全域的问题:

在Loader中

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

在玩家

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

以及在Player中,对于我的init()函数

addEventListener(Event.ADDED_TO_STAGE, displayLogin);

这些都没有帮助。

我完全失去了。关于如何让Loader允许玩家访问其舞台属性,这是我的头脑。

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

1 个答案:

答案 0 :(得分:0)

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

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