【发布时间】:2013-02-21 01:22:36
【问题描述】:
如何加载另一个脚本文件并在其上运行方法?
我正在使用 InDesign javascript,但我不知道如何在同一个脚本中包含多个文件。
【问题讨论】:
标签: javascript include adobe require adobe-indesign
如何加载另一个脚本文件并在其上运行方法?
我正在使用 InDesign javascript,但我不知道如何在同一个脚本中包含多个文件。
【问题讨论】:
标签: javascript include adobe require adobe-indesign
三个选项:import、app.doScript 和 $.evalFile。我更喜欢 $.evalFile。见app.doScript vs $.evalFile
C:\script1.jsx
(function() {
$.evalFile(new File("/c/script2.jsx"));
var sFullName = g_script2.combineName("John", "Doe");
$.writeln(sFullName);
return "Success";
})();
C:\script2.jsx
g_script2 = {
combineName: function(sFirstName, sLastName) {
return sFirstName + " " + sLastName;
}
};
如果 script2.jsx 不在 C 盘根目录下,请修改脚本 1 的真实位置。
sFullName 将是全球性的。g_script2。combineName 方法。需要注意的是,脚本的所有文件都将共享同一个全局命名空间,这就是脚本 1 可以访问 g_script2 的方式。但是,这也意味着对于一个函数或变量,任何两个文件都不应该具有相同的名称,除非它们保存在一个全局对象中,如本例所示。combineName 函数运行,并返回一个字符串。【讨论】:
c:/script2.jsx 而不是/c/script2.jsx。如果根驱动器上有一个名为c 的文件夹,即c:\c ,则后者将失败。如果script2.jsx 与script1.jsx 位于同一文件夹中,则可以使用命令$.evalFile(new File((new File($.fileName)).parent.fullName + "\script2.jsx")) 运行它。或者,ExtendScript 确实支持相对文件路径,但我不建议使用它们,因为它们与正在运行的脚本无关。
var root = (new File($.fileName)).parent + "/"; - 它返回这样的路径,但是:/c/some%20folder/path - 请注意缺少尾部斜杠,顺便说一句。并且,使用$.writeln(sFullName); 在我的计算机上调用 ESTK。没有这条线一切正常。
ExtendScript 提供预处理器指令以包含外部脚本。 该指令将目标文件的内容插入到语句所在位置的当前脚本文件中。因此,在语句之后,您将能够调用任何方法,就像它是当前脚本的方法一样:
#target InDesign;
// Include other script file that includes a function otherScriptFileMethod
#include "otherScriptFile.jsx"
// Now you can call the method as it was written in this script file
otherScriptFileMethod();
【讨论】: