Как макросы в кореле или экселе - нельзя.Нельзя ли его "зашить" в тело шаблона indt'a, что бы при открытии шаблона, оно бы само "проигралось"?
Итак, то, что вы хотите, называется прослушивателем событий. (См. раздел "Working with event listeners" в руководстве по написанию сценариев InDesign .)
Сохраните файл .jsx в папке "startup scripts". (На Mac он находится в /Applications/Adobe InDesign CS6/Scripts/startup scripts/.)
#targetengine "session"
app.addEventListener('afterOpen', function(myEvent) {
// afterOpen fires twice: once when the document opens
// and once when the window loads. Choose one,
// ignore the other.
// See: Adobe Support Community
if (myEvent.target.constructor.name !== 'Document') {
return;
}
var myDoc = myEvent.target;
// Continue on with your code from here
}
app.addEventListener('afterOpen', function(theEvent) {
if (theEvent.target.constructor.name !== 'Document') {
return;
}
// Do what you want to do
// And go where you're going to
// Think for yourself
});
Раз говорит, значит выполняется, просто аккуратно записать все надо.Сейчас говорит, что объекта больше нет
РазумеетсяЗначит придумывать идентификацию: тот ли это документ, где надо предлагать выполнить скрипт.
Вы, наверное, с акробатом путаете.Вроде были где-то когда-то какие-то варианты с размещением скрипта в некотором скрытом поле документа или в Script Label'ах. Могло такое быть?
У документа есть имя файла.тот ли это документ, где надо предлагать выполнить скрипт.
Не разобрался как передать в var myDoc = myEvent.target; открываемый файл шаблона верстки. 2 часа разбирательств и тестирований закончились зацикливанием с открытием кучи копий). На данном этапе проще присвоить нужному скрипту быструю клаву. Вот если бы автовыполнение привязать к конкретному файлу, тогда было бы удобнее (а то надо на каждом открываемом/создаваемом файле делать проверку, нет ли в нем "приметы", что это тот файл, где и надо выполнять процедуры). Сложнова-то (((.Как макросы в кореле или экселе - нельзя.
Решение вашей проблемы выглядит так:
Не совсем понял суть вашей проблемыНе разобрался как передать в var myDoc = myEvent.target
Вирус - да. С др. стороны, было бы логично открывать шаблон журнала и автопроставлять напр., даты, месяц, что-то еще. Или открывать шаблон персонального документа и тут просить указать ФИО. А то все это приходится запускать руками (а их [рук] не хватает))Раз говорит, значит выполняется, просто аккуратно записать все надо.
Разумеется
Вы, наверное, с акробатом путаете.
Конечно, можно придумать где в документе спрятать хоть плагин, хоть исполняемый модуль, но вызываться он при открытии документа без внешнего скрипта не будет иначе такой код называется "вирус"
Не вижу идеологической проблемы, если открывать не скрипт из документа, а, наоборот, документ из скриптаВирус - да. С др. стороны, было бы логично открывать шаблон журнала и автопроставлять напр., даты, месяц, что-то еще. Или открывать шаблон персонального документа и тут просить указать ФИО. А то все это приходится запускать руками (а их [рук] не хватает))
Было так:Не совсем понял суть вашей проблемы
А что у вас было в myEvent.target?
function myAfterNewHandler(myEvent){
//var myDocument = myEvent.parent;
///alert("Работает!");
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract; // чтобы не спрашивало о data-файле
var aD = myEvent.target;
//~ var aD = app.open(File("d:/Work/mDoc.indt"));
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; // чтобы открть диалог
Не разобрался как передать в var myDoc = myEvent.target; открываемый файл шаблона верстки. 2 часа разбирательств и тестирований закончились зацикливанием с открытием кучи копий). На данном этапе проще присвоить нужному скрипту быструю клаву. Вот если бы автовыполнение привязать к конкретному файлу, тогда было бы удобнее (а то надо на каждом открываемом/создаваемом файле делать проверку, нет ли в нем "приметы", что это тот файл, где и надо выполнять процедуры). Сложнова-то (((.
function myScript(myDoc)
{
}
app.addEventListener('afterOpen', function(theEvent) {
if (theEvent.target.constructor.name !== 'Document') {
return;
}
myScript(theEvent.target);
});
А куда проверку на конструктор убрали? По моей ссылке ж специально сказано, что на это надо обратить вниманиеvar aD = myEvent.target;
Проверку на конструктор убрал, так как она же избыточна (всегда же открывается документ вроде как). По ссылке попал на общую коммюнити и там сразу не найти, где разъясняется про этот момент. Не могу задавить начальный диалог (предупреждение об устаревших связях)А куда проверку на конструктор убрали? По моей ссылке ж специально сказано, что на это надо обратить внимание
Это раз
А два - кто ж в обработчике события открытия файла вызывает его же? Разумеется рекурсия божественна!
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract; // чтобы не спрашивало о data-файле
var myEventListener = app.eventListeners.add("afterOpen", myAfterNewHandler);
function mySnippet(){
var myEventListener = app.eventListeners.add("beforeOpen", myAfterNewHandler);
}
function myAfterNewHandler(myEvent){
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;
}
Экий вы упрямый однакоПроверку на конструктор убрал, так как она же избыточна (всегда же открывается документ вроде как).
а вы "убрал потому что избыточна" а потом жалуетесь на// afterOpen fires twice: once when the document opens
// and once when the window loads. Choose one,
// ignore the other.
// See: Adobe Support Community
if (myEvent.target.constructor.name !== 'Document') {
return;
}
Вот этот момент я тоже не совсем понял - вы подавить предупреждение хотите на какое время? Пока ваш обработчик исполняется?????? А с чего вы решили что индизайн линки будет проверять именно на пустом участке кода внутри него?Предупреждение о потерянных связях не подавляется.
function myAfterOpenHandler(myEvent){
if (myEvent.target.constructor.name !== 'Document') {
return;
}
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;
var aD = myEvent.target;
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;
var myEventListener = app.eventListeners.add("afterOpen", myAfterOpenHandler);
Еще раз поподробнее повторяю:Вот он хендлер-обработчик. Внутри него прошу "не предупреждать" (до открытия документа). Все равно предупреждает.
Если писать ДО вызова обработчика:
Вот он хендлер-обработчик. Внутри него прошу "не предупреждать" (до открытия документа). Все равно предупреждает.
Если писать ДО вызова обработчика: