【问题标题】: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”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 2016-07-14
      • 2012-04-13
      • 2010-12-06
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多