Как удалить (под)меню и все следы его существования?

Использование кода

#targetengine "mine"
var mainmenu = app.menus.items("$ID/Main");
var menu = mainmenu.submenus.add("Test");

Я добавил подменю в меню InDesign, которое позже удалил через

menu.remove();
delete menu;

К сожалению, когда я пытаюсь воссоздать меню, ничего не происходит, поскольку InDesign, похоже, думает, что оно все еще там, пока я не перезапущу InDesign, после чего появится меню (но без каких-либо добавленных элементов). Как я могу навсегда удалить меню, чтобы его можно было воссоздать позже без перезапуска InDesign? Меню также все еще отображается в настройках меню InDesign (что еще хуже, даже дважды, так как я пробовал «Тест» и «& Тест» в качестве имен меню), что я также хотел бы исправить ...

редактировать Оказывается, это странное поведение происходит только при выполнении скрипта через панель скриптов InDesign, но не через запуск или набор инструментов ExtendScript. Однако пункты меню остаются после удаления.


person Tobias Kienzler    schedule 23.06.2016    source источник


Ответы (2)


Вполне вероятно, что вы создаете многочисленные ссылки на объект меню в предыдущих попытках, и если это постоянный механизм, ссылки остаются в силе.

Перезапустите InDesign, и он должен это сделать.

Вот несколько скриншотов, которые я сделал из прикрепленного скрипта. isValid изменяется от истинного до ложного в зависимости от стадии скрипта и существования меню.

Меню добавлено и действует Меню удалено и больше недействительно

#targetengine "mine"
var mainmenu = app.menus.item("$ID/Main");

var menu = mainmenu.submenus.item("Test");
!menu.isValid && menu = mainmenu.submenus.add("Test", LocationOptions.before, mainmenu.submenus.item("$ID/#Keyboard_Help"));
alert( menu.isValid );
//comment ON/OFF to remove or not the menu
menu.remove();

alert( menu.isValid );
person Loic    schedule 23.06.2016
comment
Вы правы, isValid изменения - у меня наверняка завалялся глобал, который я тем временем успел delete. Осталась проблема еще в том, что меню не пересоздается без перезагрузки... Или у вас этого не происходит, если запустить скрипт еще раз? - person Tobias Kienzler; 23.06.2016
comment
Кстати, согласно этой публикации, даже #targetengine не сохраняется при перезапуске InDesign. Кажется, в самих меню InDesigns произошли некоторые более фундаментальные изменения... - person Tobias Kienzler; 23.06.2016
comment
Я создал ADD|REMOVE|ADD|REMOVE и могу подтвердить, что меню может быть добавлено после удаления на моей стороне. #targetengine не сохраняется при перезапуске InDesign. Конечно, это не так, но разве вы не используете свой сценарий в папке сценариев запуска? Это может объяснить ваши проблемы. - person Loic; 23.06.2016
comment
Теперь мы подошли ближе: разница заключается в выполнении сценария через автозагрузку или набор инструментов ExtendScript, где это работает, и выполнении его вручную через меню сценариев InDesign, где это не работает — как это было Изначально я хотел протестировать m-/ Таким образом, с использованием запуска проблем нет. Спасибо за ваш отзыв :) - person Tobias Kienzler; 24.06.2016
comment
Тем не менее, пункт меню по-прежнему остается в настройках меню InDesign... Это не так уж и ужасно, но теперь у меня будет пункт «Проверить» и «Проверить», пока я не сотру InDesign. - person Tobias Kienzler; 24.06.2016

Когда вы используете постоянный сеанс, рекомендуется дважды проверять, что вы делаете. В вашем случае это означает проверку возможного предсуществования меню, прежде чем пытаться его добавить.

#targetengine "mine"
var mainmenu = app.menus.item("$ID/Main");

var menu = mainmenu.submenus.item("Test");
!menu.isValid && menu = mainmenu.submenus.add("Test", LocationOptions.before, mainmenu.submenus.item("$ID/#Keyboard_Help"));

//comment ON/OFF to remove or not the menu
//menu.remove();

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

person Loic    schedule 23.06.2016
comment
Проблема в том, что даже после menu.remove(); delete menu; mainmenu.submenus.items("Test").isValid по-прежнему будет true, а ранее удаленное меню не будет отображаться до тех пор, пока я не перезапущу InDesign, после чего мне придется заново добавлять пункты меню. - person Tobias Kienzler; 23.06.2016
comment
Хм, я никогда не удосужился проверить, где InDesign по умолчанию размещает меню, но это хорошо. - person Tobias Kienzler; 23.06.2016
comment
Кстати, если я опускаю LocationOptions.before, новое меню добавляется после справки - person Tobias Kienzler; 04.07.2016