创建新页面时是否有 InDesign 事件处理程序?

Is there an InDesign event handler for when new pages are created?

我只想在 inDesign 中创建一个新页面时 运行 有一个函数。 Adobe 的文档似乎允许您将事件处理程序附加到几乎所有对象,但他们没有提供任何示例说明如何在文档级别之后执行此操作。

var myEventListener = app.eventListeners.add("afterNew", myAfterNewHandler);

如何在创建新页面时触发它。我已经尝试用 app.document.pages 替换 app 但它没有用。

我尝试使用 MutationEvent, 此代码段在添加新页面时创建带有时间戳的文本框。

#targetengine session

var doc = app.activeDocument;
var listener = doc.addEventListener(
  MutationEvent.AFTER_ATTRIBUTE_CHANGED,
  create_dummy
);
listener.name = 'ooo';

function create_dummy(e) {
  if (e.attributeValue.constructor.name === 'Page') {
    var tf = e.attributeValue.textFrames.add();
    tf.geometricBounds = [1,1,72,144];
    tf.parentStory.contents = new Date().toString();
  }
}

谢谢

毫克

我找不到任何聪明的方法。

以下代码段仅适用于在页面面板或其快捷方式中添加新页面图标,

在文档设置对话框中设置页面长度导致模态对话框错误。

var doc = app.activeDocument;
var p = doc.pages.length;
var listener = doc.addEventListener(
  MutationEvent.AFTER_ATTRIBUTE_CHANGED,
  create_dummy
);
listener.name = 'ooo';

function create_dummy(e) {
  if (e.attributeValue.constructor.name === 'Page') {
    if (p < e.currentTarget.pages.length) {
      var tf = e.attributeValue.textFrames.add();
      tf.geometricBounds = [1,1,72,144];
      tf.parentStory.contents = e.timeStamp.toString();
    }
    p = e.currentTarget.pages.length;
  }
}

谢谢

毫克

试试这个……

#targetengine 'onAddingPage'

var db = {};

var main = function () {
 var myIdleTask = app.idleTasks.item ("onAddingPage"),
 onIdleEventHandler = function(idleEvent) {
  var doc = app.properties.activeDocument;
  
  if ( !doc ) {
   db = {};
   return;
  }
  
  if ( !db[doc.id] ) {
   db[doc.id] = doc.pages.length;
   return;
  }
 
  else {
   if ( doc.pages.length>db[doc.id] ) {
    !app.modalState && alert("Hey you just added "+(doc.pages.length-db[doc.id])+" page(s) ! Didn't you ?" );
   }
   db[doc.id] = doc.pages.length;
  }
 };
 
 if(!myIdleTask.isValid) {
  myIdleTask = app.idleTasks.add({name:"onAddingPage", sleep:100});
  myIdleTask.addEventListener(IdleEvent.ON_IDLE, onIdleEventHandler);
 }
}

main();