Как требовать или включать скрипты в indesign?

Как загрузить другой файл сценария и запустить на нем метод?

Я использую InDesign javascript, и я не знаю, как включить несколько файлов в один скрипт.

2 ответов


три варианта: импорт, приложение.doScript, и $.evalFile. Я предпочитаю $.evalFile. См.app.doScript против $.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 вызывает combineName метод сценариев 2. Здесь важно отметить, что все файлы вашего скрипта будут иметь одно и то же глобальное пространство имен, поэтому скрипт 1 может получить доступ g_script2. Однако, это также означает, что нет двух файлы должны иметь одинаковое имя функции или переменной, если они хранятся внутри глобального объекта, как в данном примере.
  5. на combineName функция запускается и возвращает строку.
  6. скрипт 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();