外部文件事件处理程序的事件对象在哪里?

时间:2014-06-26 14:41:46

标签: events adobe adobe-indesign extendscript

Adobe InDesign CS6 Scripting Guide: JavaScriptlink to pdf)的第8章:事件(第136页)中,它说,

  

eventListeners使用脚本中定义的处理函数   (而不是在外部文件中)必须使用#targetengine "session"。   如果脚本使用#targetengine "main"(默认值)运行,则   事件发生时,函数不可用,以及脚本   生成错误。

错误如下所示:

  

请求的操作无法完成,因为对象没有   存在的时间越长。

使用#targetengine不是我的脚本的选项,所以我一直坚持使用事件处理程序的外部文件引用。

我的问题是:如何在外部文件事件处理程序中访问事件对象?我已尝试app.scriptArgs.get("event")并检查typeof event无济于事。在不知道事件目标的情况下,我的事件处理程序是无用的。

1 个答案:

答案 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'与目标文件