Как макросы в кореле или экселе - нельзя.Нельзя ли его "зашить" в тело шаблона 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);
Еще раз поподробнее повторяю:Вот он хендлер-обработчик. Внутри него прошу "не предупреждать" (до открытия документа). Все равно предупреждает.
Если писать ДО вызова обработчика:
Вот он хендлер-обработчик. Внутри него прошу "не предупреждать" (до открытия документа). Все равно предупреждает.
Если писать ДО вызова обработчика: