Как требовать или включать скрипты в 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 создает и выполняет анонимную функцию, чтобы избежать загрязнения глобального пространства имен. Если он этого не сделал,
sFullName
будет глобальной. - скрипт 1 выполняет скрипт 2.
- скрипт 2 создает объект и сохраняет его в глобальную переменную
g_script2
. - скрипт 1 вызывает
combineName
метод сценариев 2. Здесь важно отметить, что все файлы вашего скрипта будут иметь одно и то же глобальное пространство имен, поэтому скрипт 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();