我正在使用flex创建一个(桌面)应用程序,但AIR不是一个选项。 (我听说你需要air-installer来播放.exe)我的flex应用程序需要加载一个php生成的xml,但是当你导出一个发布版本时它必须从swf文件运行。
在localhost上测试我的flex应用程序时,一切都很好。加载了xml,我得到了数据。 但是在导出发布版本并启动.swf之后,我得到安全声音(沙盒),说它无法从网页加载xml。
有人知道解决这个问题吗? 有人知道空中安装程序是否真的必须启动.exe? (我只有一个mac)
答案 0 :(得分:2)
由于Flash Player的安全限制,您正在沙盒中运行。如果你启动应用程序SWF,它将有一个类似于file:/// path / to / my / app的URL,它将它放在本地文件sadbox(这是运行swf的限制最多的地方)。 AIR还为您提供了本地文件系统沙箱,但您可以访问本地文件并保存到磁盘。如果您从http://example.com运行swf,那么您在example.com上下文广告中可以加载该域中的内容。如果您需要从其他域加载内容,则需要在内容/服务所在的其他域上使用crossdomain.xml策略文件。
alt text http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security/fig01.gif
This article explains,详细说明了crossdomain.xml文件的概念。这是一个允许从任何域到资源的连接的示例:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
<site-control permitted-cross-domain-policies="master-only"/>
</cross-domain-policy>
哪个适用于你的情况。
答案 1 :(得分:1)
由于Flex应用程序将从本地文件系统启动 - 通过file:// handler或c:\ mypp \ mySwf.swf,实际上有两个安全组件需要处理:
首先,如上面的答案所述,确保可以联系您的php页面。这可以通过crossdomain.xml策略文件解决。
第二个问题源于它的运行方式 - localy。 Flash有四个沙箱(远程,本地文件系统,本地网络和信任)。默认情况下,来自Web的所有swfs都放在远程沙箱中;那些在本地运行的默认为local-with-filesystem ==没有网络调用。
您可能希望更改其推入的沙箱。对于具有文件系统/网络的本地,您只需在Flex编译器中调整标志(例如,通过Flex Builder选项)。但有一点需要注意:您只能拥有一个 - 从本地系统或从网络加载数据。两者同时无法实现这一目标。
将swf放在受信任的沙箱中,它可以从本地系统和远程服务器加载数据,这有点棘手 - 您需要让安装程序修改一些配置文件。
答案 2 :(得分:0)
你需要添加一个跨域策略文件,它只是一小段xml,说flex允许与该远程实体通信