【问题标题】:Air app swf assets in ApplicationStorageDirectory produce Sandbox ViolationApplicationStorageDirectory 中的 Air 应用程序 swf 资产产生沙盒违规
【发布时间】:2011-02-23 07:18:24
【问题描述】:

我有一个 Air 应用程序,它允许用户导入 jpg、png 和 swf 文件并将它们用作图像的源,他们可以在 Canvas 周围拖动。

导入功能将选定的文件复制到 ApplicationStorageDirectory 内的 images 目录中。

当我点击一个以 swf 作为其来源的图像时,我得到一个安全沙箱违规(例如,SecurityDomain 'app-storage:/Project1/images/menuBarBkgd.swf' 试图访问不兼容的上下文 'app:/ Main.swf')。我的 mouseDown 处理程序没有被调用,所以我无法选择它并允许它被拖动。

显然这与应用程序有关:域,但我该如何解决这个问题?

【问题讨论】:

    标签: apache-flex security air


    【解决方案1】:

    为什么不使用 mouseChildren = false 来阻止鼠标访问图像呢?属于 AIR 应用程序的 Sprite 可以显示图像,并自己处理传入的 MouseEvents。或者,您可以从加载的图像中读取 BitmapData 并使用它来填充 Bitmap 的新实例,它是 AIR 应用程序的原生实例。

    【讨论】:

      【解决方案2】:

      在 Adob​​e Air 中,以下应用程序域仅允许用于以“app:/”开头的 URL:

      1. ApplicationDomain.currentDomain
      2. new ApplicationDomain(ApplicationDomain.currentDomain)
      3. new ApplicationDomain(domain),其中domain 是这三种类型中的任何一种。

      您可以从不同的 URL 将 SWF 加载到 Adob​​e Air 应用程序中,方法是构建一个独立的应用程序域,该域不能直接或间接地访问 ApplicationDomain.currentDomain。您可以通过将null 传递给ApplicationDomain 的构造函数来做到这一点。

      换句话说,使用new ApplicationDomain() 作为应用程序域。

      【讨论】:

        【解决方案3】:

        之前发布的答案不是原始问题的解决方案。 这里的问题是 SecurityDomain,而不是 ApplicationDomain。我认为有一种方法可以在 Air 应用程序中使用 app:/ 域外部的 swf 文件,但文档在这个问题上远非直接,最终的解决方案可能需要最终用户的一些干预。

        我只是想创建一个简单的所见即所得页面编辑器,并允许用户将创建为 swf 文件的图像用作 mx:Image 组件的源。那行得通!您可以使用 app:/ 域外部的 swf 文件作为 mx:Image 的源。但是,如果您想在屏幕上拖动它,只要单击它,就会违反沙箱,并且开始拖动的 mousedown 事件会被中断。似乎即使 swf 文件中没有脚本,如果任何资产已转换为movieClips(我们在这里讨论的是 Flash),那么一旦您单击它们,它们就会尝试引用父 swf。 Air 应用程序将此解释为外部 swf 试图对其编写脚本并发生沙盒违规。

        解决这个特定问题的方法是将 mx:Image 放在 mx:Canvas 中,并将 Canvas 的 mouseChildren 属性设置为 false。

        【讨论】:

          【解决方案4】:

          拖动操作通常涉及访问属于父沙箱的阶段。

          您有两个选择 - 一个是如果错误实际上不会影响已编译的 Air 应用程序中的功能,则只需忽略/捕获错误,它不会因此类错误而停止运行(通常没有)。

          另一种选择是重构功能,使其不访问舞台。这很难做到,因为似乎有一些鼠标事件试图获取舞台坐标来填充它们的属性。我经常看到这个错误,它通常不会妨碍我。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-25
            • 2013-10-02
            相关资源
            最近更新 更多