在Adobe InDesign CS6 Scripting Guide: JavaScript(link to pdf)的第8章:事件(第136页)中,它说,
eventListeners
使用脚本中定义的处理函数 (而不是在外部文件中)必须使用#targetengine "session"
。 如果脚本使用#targetengine "main"
(默认值)运行,则 事件发生时,函数不可用,以及脚本 生成错误。
错误如下所示:
请求的操作无法完成,因为对象没有 存在的时间越长。
使用#targetengine
不是我的脚本的选项,所以我一直坚持使用事件处理程序的外部文件引用。
我的问题是:如何在外部文件事件处理程序中访问事件对象?我已尝试app.scriptArgs.get("event")
并检查typeof event
无济于事。在不知道事件目标的情况下,我的事件处理程序是无用的。
答案 0 :(得分: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'与目标文件