Javascript 如何在indesign中要求或包含脚本?

Javascript 如何在indesign中要求或包含脚本?,javascript,include,adobe,require,adobe-indesign,Javascript,Include,Adobe,Require,Adobe Indesign,如何加载另一个脚本文件并在其上运行方法 我正在使用InDesign javascript,不知道如何在同一脚本中包含多个文件。三个选项:导入、app.doScript和$.evalFile。我更喜欢.evalFile美元。看 工作示例: C:\script1.jsx (function() { $.evalFile(new File("/c/script2.jsx")); var sFullName = g_script2.combineName("John", "Doe");

如何加载另一个脚本文件并在其上运行方法


我正在使用InDesign javascript,不知道如何在同一脚本中包含多个文件。

三个选项:导入、app.doScript和$.evalFile。我更喜欢.evalFile美元。看

工作示例: C:\script1.jsx

(function() {
    $.evalFile(new File("/c/script2.jsx"));
    var sFullName = g_script2.combineName("John", "Doe");
    $.writeln(sFullName);
    return "Success";
})();
g_script2 = {
    combineName: function(sFirstName, sLastName) {
        return sFirstName + " " + sLastName;
    }
};
C:\script2.jsx

(function() {
    $.evalFile(new File("/c/script2.jsx"));
    var sFullName = g_script2.combineName("John", "Doe");
    $.writeln(sFullName);
    return "Success";
})();
g_script2 = {
    combineName: function(sFirstName, sLastName) {
        return sFirstName + " " + sLastName;
    }
};
如果script2.jsx不在C驱动器的根目录中,请使用其真实位置修改Script1

说明:
  • 脚本1创建并执行匿名函数以避免污染全局命名空间。如果不这样做,
    sFullName
    将是全局的
  • 脚本1执行脚本2
  • 脚本2创建一个对象并将其存储到全局变量
    g_script2
  • 脚本1调用脚本2的
    combineName
    方法。这里需要注意的是,脚本的所有文件都将共享相同的全局名称空间,这就是脚本1可以访问
    g_script2
    的方式。但是,这也意味着,对于函数或变量,任何两个文件都不应具有相同的名称,除非它们保存在全局对象中,如本例所示
  • 运行
    combineName
    函数,并返回字符串
  • 脚本1打印名称,然后返回“Success”。因为这是堆栈上的最后一个对象,所以它将作为脚本结果返回

  • 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();
    

    谢谢,在windows中,以下两种功能都可以使用:“c:/script2.jsx”而不是“/c/script2.jsx”。但是相对路径呢?与当前脚本相关。在windows中,最好使用
    c:/script2.jsx
    而不是
    /c/script2.jsx
    。如果根驱动器上有名为
    c
    的文件夹,即
    c:\c
    ,则后者将失败。如果
    script2.jsx
    script1.jsx
    位于同一文件夹中,则可以使用命令
    $.evalFile(新文件($.fileName)).parent.fullName+“\script2.jsx”)
    运行它。或者,ExtendScript确实支持相对文件路径,但我不建议使用它们,因为它们与正在运行的脚本无关。哇!这很有魅力。要获取脚本自己的文件夹,可以执行以下操作:
    var root=(新文件($.fileName)).parent+“/”-它返回的路径如下所示:
    /c/some%20folder/path
    -顺便说一句,注意后面没有斜杠。使用
    $.writeln(sFullName)调用我计算机上的ESTK。没有这条线,一切都很顺利。