Где находится объект event для внешних обработчиков событий файлов?

#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’ с целевым документом