是否有创建新页面时的InDesign事件处理程序?
问题描述:
我只想在inDesign中创建新页面时运行一个函数。 Adobe的文档似乎允许您将事件处理程序附加到几乎所有的对象上,但它们没有给出任何有关如何在文档级别之前执行此操作的示例。是否有创建新页面时的InDesign事件处理程序?
var myEventListener = app.eventListeners.add("afterNew", myAfterNewHandler);
如何获取此信息以触发创建新页面。我已经尝试用app.document.pages
替换app
,但它不起作用。
答
我找不到任何智能的方式。
下面的代码片段只适用于在页面面板添加新页面图标或它的快捷方式,
设置页面长度文件设置对话框原因模态对话框错误。
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;
}
}
谢谢
毫克
答
我试图使用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();
}
}
谢谢
毫克
答
尝试......
#targetengine 'onAddingPage'
var db = {};
var main = function() {
\t var myIdleTask = app.idleTasks.item ("onAddingPage"),
\t onIdleEventHandler = function(idleEvent) {
\t \t var doc = app.properties.activeDocument;
\t \t
\t \t if (!doc) {
\t \t \t db = {};
\t \t \t return;
\t \t }
\t \t
\t \t if (!db[doc.id]) {
\t \t \t db[doc.id] = doc.pages.length;
\t \t \t return;
\t \t }
\t
\t \t else {
\t \t \t if (doc.pages.length>db[doc.id]) {
\t \t \t \t !app.modalState && alert("Hey you just added "+(doc.pages.length-db[doc.id])+" page(s) ! Didn't you ?");
\t \t \t }
\t \t \t db[doc.id] = doc.pages.length;
\t \t }
\t };
\t
\t if(!myIdleTask.isValid) {
\t \t myIdleTask = app.idleTasks.add({name:"onAddingPage", sleep:100});
\t \t myIdleTask.addEventListener(IdleEvent.ON_IDLE, onIdleEventHandler);
\t }
}
main();
此解决方案工作。但是,当页面被删除或在页面面板中双击页面时,它也会运行该功能。有什么办法可以区分这些其他事件吗? –