在Adobe InDesign CS6脚本指南:JavaScript(链接到pdf),第8章:第136页的事件中,
eventListeners
,使用脚本中定义的处理程序函数(而不是在外部文件中)必须使用#targetengine "session"
。如果脚本使用#targetengine "main"
(默认)运行,则函数在事件发生时不可用,并且脚本生成错误。
错误如下:
请求的操作无法完成,因为对象没有不再存在了。
使用#targetengine
不是我的脚本的选项,所以我坚持使用外部文件引用的事件处理程序。
我的问题是:我如何访问外部文件事件处理程序中的事件对象?我试过app.scriptArgs.get("event")
和检查typeof event
无济于事。如果不知道事件的目标,我的事件处理程序是无用的。
该事件可通过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);
当你运行activateeventandler。在Jsx中,您应该看到一个带有文本
的警告。事件'afterNew'与目标文档