Как создать всплывающее окно перед закрытием документа - InDesign

Раньше я использовал javascript для сценария, используя, eventlistenerчтобы сказать

app.addEventListener( "beforeClose" , [function]);
function [functionname]()

и т.д...

Что мне нужно, так это способ сказать InDesign: «перед закрытием документа показать окно сообщения, в котором говорится: «Вы проверили свою страницу?».

Который затем может быть одобрен и продолжит процесс закрытия.

Есть ли у кого-нибудь идеи, как это можно сделать, или какие-либо альтернативы, которые могут дать такой же эффект?

или даже метод «beforePrint», если он существует?

Ответы (2)

Изменить: вот скрипт, который запрашивает подтверждение перед закрытием документа:

#target Indesign
#targetengine "closeConfirmation"
app.addEventListener("beforeClose", confirmClose);

function confirmClose(e) {

  if(e.parent.constructor.name !== "LayoutWindow") return;

  if (confirm ("Did you proof your page?") === false) {
    e.stopPropagation();
    e.preventDefault();
  }
}

А вот и оригинальный пост о том же для beforePrintсобытия:

#target Indesign
#targetengine "printConfirmation"
app.addEventListener("beforePrint", confirmPrint);

function confirmPrint(e) {
  if (confirm ("Do you really want to print?") === false) {
    e.stopPropagation();
    e.preventDefault();
  }
}

Обратите внимание, что у первого есть дополнительное предложение if, потому что при закрытии документа и the , Documentи the LayoutWindowвызовут событие. Так что, если бы вы не отменили один из них, он бы попросил вас дважды.

Вы можете переместить их в папку сценариев запуска, после чего они автоматически регистрируют события после запуска InDesign.

Это абсолютно идеально! Работал как шарм!

Могу ли я предложить сделать этот сценарий еще более безопасным, сначала проверив, был ли уже добавлен слушатель или нет, прежде чем добавлять его?

#target Indesign
#targetengine "printConfirmation"
function main() {
   var ev = app.eventListeners.itemByName ("onBeforePrintHandler" );
   if ( ev.isValid ) return;
      app.addEventListener("beforePrint", confirmPrint).name = "onBeforePrintHandler";
   }
}
function confirmPrint(e) {
   if (confirm ("Do you really want to print?") === false) {
       e.stopPropagation();
       e.preventDefault();
   }
}
main();