2010-04-15 51 views
0

我正尝试在我的Adobe AIR应用程序中加载外部SWF。加载的SWF正尝试访问URL以通过XML检索一些信息。 当单独启动SWF时,它工作正常。当从File.applicationStorageDirectory加载SWF时,我将得到一个安全错误,因为加载的应用程序在本地与文件系统Sandbox中执行相当。 第一个问题:有没有办法改变这个?加载的SWF正在网络沙盒中运行?Adob​​e Air中的安全行为

由于第一次尝试没有奏效,我已将SWF移至app://目录。 现在我会得到一个安全错误,因为在应该检索XML数据的服务器上没有策略文件。 第二个问题:为什么在单独运行SWF时策略文件不是必需的,但在尝试从应用程序Sandbox加载数据时是必需的?我究竟做错了什么?

提前致谢!

回答

1

这是我的解决方案。

我正在做一个基于ActionScript的应用程序btw。我的目标是创建一个AIR应用程序,根据给定的互联网资源按需加载不同的模块。这两个应用程序正在使用child/parentSandboxBridge进行通信。

我正在使用SWFLoader类,但未正确通过LoaderContext和allowLoadBytesCodeExecution(或allowCodeImport for AIR2.0)。当我传递一个LoaderContext与提到的变量时,我得到了一个VerifyError:错误#1053:由于AIR应用程序使用Flex 4.0完成,并且加载的SWF使用Flex 3.5进行编译,因此在mx.managers.SystemManagerProxy中激活了非法覆盖。

虽然loadForCompatibility属性设置为true,但引发错误的原因在于,传递LoaderContext对象时,SWFLoader类没有为兼容性设置必要的applicationDomain。所以我做了自己的applicationDomain设置,一切都像魅力一样。 如果有人对此过程感兴趣,只需查看SWFLoader :: loadContent方法即可。在Flex 4中,有趣的部分从第1836行开始。