2009-08-10 103 views
0

我正在用flex创建(桌面)应用程序,但AIR不是一个选项。 (我听说你需要使用air-installer来播放.exe)我的flex应用程序需要加载一个php生成的xml,但是当你导出一个发布版本时它必须从swf文件运行。Flex:从Flex swf加载xml

当在本地主机上测试我的flex应用程序时,一切都很好。 XML被加载,我得到的数据。 但是,在我导出发布版本并启动.swf后,我得到安全消除(沙箱),称它无法从网页加载xml。

有没有人知道解决这个问题的方法? 有没有人知道空气安装程序是否真的需要启动.exe? (我只有一个MAC)

回答

2

由于安全限制您正在沙箱中运行的Flash Player。如果启动应用程序SWF,它将有一个类似file:/// path/to/my/app的URL,它将其放入本地文件sadbox(这是运行swf的最严格的地方)。 AIR还为您提供本地文件系统沙箱,但您可以访问本地文件并保存到磁盘。如果您从http://example.com开始运行瑞士法郎,则您在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> 

这将工作在你的情况。

0

your'll需要添加一个跨域策略文件,说是柔性的xml其短位被允许谈论到远程实体

1

由于Flex应用程序将从本地文件系统启动 - 通过file://处理程序或类似于c:\ mypp \ mySwf.swf,实际上有两个安全组件需要处理:

  • 第一,正如上面的答案中提到的是确保您的PHP页面可以联系。这是通过crossdomain.xml策略文件解决的。

  • 第二个问题源于它运行的方式 - localy。 Flash有四个沙箱(远程,本地文件系统,本地网络和可信任)。默认情况下,来自Web的所有swf都放置在远程沙箱中;那些在本地运行的程序默认为本地文件系统==没有网络调用。

你可能想改变它得到推沙箱。对于本地文件系统与/网络,你可以简单地调整在Flex编译器(例如通过Flex Builder中的选项)的标志。有一件事需要注意:你只能有一个 - 从本地系统或网络加载数据。两者同时无法通过这种方式实现。

把你的瑞士法郎放在可信任的沙箱中,它可以从本地系统和远程服务器加载数据,这有点棘手 - 你需要安装程序修改一些配置文件。