【问题标题】:Using Function in Adobe Air在 Adob​​e Air 中使用功能
【发布时间】:2011-09-27 07:40:34
【问题描述】:

您好,我刚开始玩 Adob​​e Air。我将它与一个名为 Angular 的 javascript 库一起使用。

但是,库中有这行触发了 Adob​​e Air 的沙盒:

fn = Function('s', code);

在 Adob​​e Air 支持页面上有这句话:

对 new Function(param, body) 的调用可以替换为内联函数声明或仅在处理页面加载事件之前使用。

能否请您解释一下内联函数声明是什么意思以及一般如何使用它来达到相同的效果?

谢谢

【问题讨论】:

    标签: javascript air


    【解决方案1】:

    使用 eval 和其他阻塞方法的 JavaScript 框架可以在 Adob​​e Air 中运行,但不能在应用程序沙箱中运行。

    有关详细信息,请参阅此文档,但本质上,您可以通过将使用框架的页面加载到辅助框架中来使其工作。 Air 中的顶部框架始终被视为应用程序沙箱,而任何其他框架都以非应用程序模式运行,因此允许访问所有被阻止的 javascript 方法。

    http://help.adobe.com/en_US/air/html/dev/air_htmldevguide.pdf

    搜索“配置基于 HTML 的应用程序的概述”部分

    这是我用来解决此问题的框架集示例

    <body>
    
        <iframe src="/blank.html" width="100%" height="0" scrolling="no" id="top" ></iframe>
        <iframe src="http://www.example.com/air/home.html"  documentRoot="app:/" sandboxRoot="http://www.example.com/air" allowCrossDomainXHR="true" width="100%" height="720" scrolling="no" id="bottom">
        </iframe>
    
    </body>
    

    神奇之处在于 documentRoot 和 sandboxRoot 属性。设置为 documentRoot 的任何内容都会替换 sandboxRoot 中使用的域。请注意,因此 sandboxRoot 不需要是有效路径。

    在这种情况下,顶部框架将一个名为 blank.html 的文件从应用程序加载到应用程序沙箱中,因此该文件可以调用应用程序沙箱有权执行的文件系统函数等。

    第二个框架将从应用程序目录加载“home.html”,但它会将其加载到非应用程序沙箱中,该沙箱可以包含几乎任何将在 Safari 4 中运行的 JavaScript 框架(假设您使用的是AIR 运行时的最新版本)。但是,此框架无法调用安全 AIR 功能,例如文件系统访问。

    如果你想从第二个框架调用文件系统函数和其他安全方法,你需要创建一个沙箱桥,这在我上面提到的文档中有介绍。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多