#events #adobe #adobe-indesign #extendscript
#Мероприятия #adobe #adobe-indesign #extendscript
Вопрос:
В руководстве по написанию сценариев Adobe InDesign CS6: JavaScript (ссылка на pdf) в главе 8: События на странице 136 говорится,
eventListeners
должны использоваться функции-обработчики, которые используют функции-обработчики, определенные внутри скрипта (а не во внешнем файле)#targetengine "session"
. Если сценарий запускается с использованием#targetengine "main"
(по умолчанию), функция недоступна при возникновении события, и сценарий выдает ошибку.
Ошибка выглядит следующим образом:
Запрошенное действие не может быть выполнено, поскольку объект больше не существует.
Использование a #targetengine
не подходит для моего скрипта, поэтому я застрял с использованием ссылки на внешний файл для обработчика событий.
Моя проблема заключается в следующем: как мне получить доступ к объекту события во внешнем обработчике событий файла? Я пробовал app.scriptArgs.get("event")
и проверял typeof event
безрезультатно. Мой обработчик событий бесполезен без знания цели события.
Ответ №1:
Событие доступно в локальной области видимости через evt
переменную.
В качестве примера поместите эти два файла в одну папку:
activateEventHandler.jsx
var parentFolder = (new File($.fileName)).parent;
var eventHandlerFile = new File(parentFolder.fsName "/onEvent.jsx");
var eventListener = app.addEventListener("afterNew", eventHandlerFile);
app.documents.add();
eventListener.remove();
onEvent.jsx
alert("Event '" evt.eventType "' with target " evt.target.constructor.name);
При запуске activateEventHandler.jsx должно появиться предупреждение с текстом
Событие ‘afterWew’ с целевым документом