【问题标题】:Where is the event object for external file event handlers?外部文件事件处理程序的事件对象在哪里?
【发布时间】:2014-06-27 06:12:18
【问题描述】:
在Adobe InDesign CS6 Scripting Guide: JavaScript (link to pdf) 的第 8 章:第 136 页的事件中,它说,
eventListeners 使用脚本中定义的处理函数
(而不是在外部文件中)必须使用#targetengine "session"。
如果使用#targetengine "main"(默认)运行脚本,则
事件发生时功能不可用,并且脚本
产生错误。
错误如下所示:
请求的操作无法完成,因为对象没有
不再存在。
使用#targetengine 不是我的脚本的选项,所以我坚持使用事件处理程序的外部文件引用。
我的问题是:如何访问外部文件事件处理程序中的事件对象?我试过app.scriptArgs.get("event") 并检查typeof event 无济于事。我的事件处理程序在不知道事件目标的情况下是无用的。
【问题讨论】:
标签:
events
adobe
adobe-indesign
extendscript
【解决方案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 时,您应该会看到带有文本的警报
带有目标文档的事件“afterNew”