我只想在inDesign中创建新页面时运行一个函数。 Adobe的文档似乎允许您将事件处理程序附加到几乎所有对象,但它们没有提供任何如何在文档级别之后执行此操作的示例。
var myEventListener = app.eventListeners.add("afterNew", myAfterNewHandler);
如何在创建新页面时触发此操作。我已经尝试将app
替换为app.document.pages
,但它无效。
答案 0 :(得分:2)
试试这个......
#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();
答案 1 :(得分:1)
我尝试使用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();
}
}

谢谢
毫克
答案 2 :(得分:1)
我找不到任何聪明的方法。
以下代码段仅适用于在页面面板中添加新页面图标或其快捷方式
在文档设置对话框中设置页面长度会导致模式对话框错误。
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;
}
}
谢谢
毫克