【问题标题】:How to require or include scripts in indesign?如何在 indesign 中要求或包含脚本?
【发布时间】:2013-02-21 01:22:36
【问题描述】:

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

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

【问题讨论】:

    标签: javascript include adobe require adobe-indesign


    【解决方案1】:

    三个选项: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 的真实位置。

    说明:

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

    【讨论】:

    • 谢谢,在 Windows 中可以使用以下两种方式:“c:/script2.jsx”而不是“/c/script2.jsx”。但是相对路径呢?当前脚本的亲戚..
    • 在 windows 中最好使用c:/script2.jsx 而不是/c/script2.jsx。如果根驱动器上有一个名为c 的文件夹,即c:\c ,则后者将失败。如果script2.jsxscript1.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。没有这条线一切正常。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2020-04-12
      相关资源
      最近更新 更多