您好,我刚开始玩 Adobe Air。我将它与一个名为 Angular 的 javascript 库一起使用。
但是,库中有这一行会触发 Adobe Air 的沙箱:
fn = Function('s', code);
在 Adobe Air 支持页面上有这样一句话:
对 new Function(param, body) 的调用可以替换为内联函数声明,或者仅在处理页面加载事件之前使用。
请您解释一下内联函数声明是什么意思,以及通常如何使用它来达到相同的效果?
谢谢
最佳答案
使用 eval 和其他受阻方法的 JavaScript 框架可以在 Adobe 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 函数,例如文件系统访问。
如果你想从第二个框架调用文件系统功能和其他安全方法,你需要创建一个沙箱桥,这在我上面提到的文档中有介绍。
希望这对您有所帮助。
关于javascript - 在 Adobe Air 中使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557809/