【问题标题】:Flex: load xml from flex swfFlex:从 flex swf 加载 xml
【发布时间】:2009-08-10 17:21:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml apache-flex load


    【解决方案1】:

    由于您在沙盒中运行的 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>
    

    这将适用于您的情况。

    【讨论】:

      【解决方案2】:

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

      • 首先,如上述答案中所述,确保可以联系您的 php 页面。这是通过 crossdomain.xml 策略文件解决的。

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

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

      将您的 swf 放在受信任的沙箱中,它可以从本地系统和远程服务器加载数据有点棘手 - 您需要让安装程序修改一些配置文件。

      【讨论】:

        【解决方案3】:

        你需要添加一个跨域策略文件,它的一小段 xml 表示允许 flex 与该远程实体通信

        【讨论】:

          猜你喜欢
          • 2011-01-22
          • 1970-01-01
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多