5

目标:

我试图允许从设备本地加载的外部加载的 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:应用程序沙盒内容无法访问此功能。在 Products_fla::MainTimeline/frame1() 的 flash.system::Security$/allowDomain() 无法在此位置显示源代码。

问题: 我可以做些什么来让安全域在 AIR FOR ANDROID 设备上本地工作,这样我就不必更改我的代码?- 谢谢

4

3 回答 3

5

如果您在该行周围放置一个try catch,它不会在失败时抛出错误。这样,当您的代码可以在网络上和作为应用程序运行时。(应用程序不需要 allowDomain b/c 他们可以默认下载所有内容,这就是它失败的原因。)

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

于 2012-05-15T21:29:40.343 回答
1

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

您可以使用代码加载 swf,但如果您尝试访问舞台,例如它将失败。

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

于 2014-07-07T18:44:15.333 回答
0

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

于 2012-05-11T17:55:32.930 回答