as3 AIR for android - 应用程序 - 沙箱内容错误

时间:2012-05-03 05:16:36

标签: android actionscript-3 flash security air

目标:

我正在尝试允许外部加载的swf文件彼此通信,这些文件是从设备本地加载的。我需要能够访问变量,函数和对象。我在这里从网上加载swf内容时实现了这一点:as3 externally loaded swf from network to control externally loaded swf from network

但是当我向用户提供从设备或在线加载的选项时 ...设备swf文件无法相互通信。特别是加载的swf无法从其父级获取信息。

以下是从在线加载时有效的代码:

var InsideConent:Object = this.parent.parent as Object; //// GIVES ACCESS TO "Content.swf"
var ItWorksNow:Sprite = MovieClip(InsideConent.TWO.content).ChildInTWO;  /// 

设备不喜欢此代码:

Security.allowDomain("*");

但是在网上运行时效果很好。下面是我在APP软件包本地加载时遇到的错误。

错误:

SecurityError:错误#3207:应用程序沙箱内容无法访问此功能。     在flash.system :: Security $ / allowDomain()     在Products_fla :: MainTimeline / frame1() 无法在此位置显示源代码。

问题: 有什么办法可以让安全域在AIR FOR ANDROID设备上本地工作,所以我不必更改我的代码吗? - 谢谢

3 个答案:

答案 0 :(得分:5)

如果你在该行周围试一试,如果失败则不会抛出错误。这样,当您的代码可以在Web上运行并作为应用程序运行时。 (应用程序不需要允许域名b / c他们可以默认下载所有内容,这就是它失败的原因。)

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

答案 1 :(得分:1)

根据我的经验,您可以从另一个使用crossdomain xml正确配置的域加载远程swfs。 类似于:https://developers.arcgis.com/flex/guide/using-crossdomain-xml.htm

您可以使用代码加载swf, 但是如果你试图访问舞台,那么它将会失败。

此外,如果在您的原始项目中(托管在Web服务器上,您使用了常见的静态变量或singeltons,它将无法成功)。 我的解决方案是在那些接收我需要使用的对象的文件上添加函数。

答案 2 :(得分:0)

据我所知,您无法在AIR中加载swfs执行代码,您仍然可以使用多个swfs来显示资产,但任何代码都会产生错误。