2016-06-23 3 views
1

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

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

я добавил подменю в меню InDesign, в который я потом удаляется через

menu.remove(); 
delete menu; 

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

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

ответ

1

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

#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 всегда будет располагать меню справки в последней позиции справа.

+0

Проблема заключается в том, даже после 'menu.remove(); delete menu; ',' mainmenu.submenus.items («Test»). isValid' будет по-прежнему «истинным», и ранее удаленное меню не будет отображаться до тех пор, пока я не перезапущу InDesign, после чего мне придется добавлять элементы меню заново. –

+0

Хм, я никогда не потрудился проверить, где InDesign размещает меню по умолчанию, но хорошо. –

+0

btw, если я опускаю 'LocationOptions.before', добавляется новое меню _after_« Справка » –

1

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

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

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

The menu has been added and is valid The menu has been removed and is no longer valid

#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); 
+0

Вы правы,' isValid' изменения - у меня, должно быть, была глобальная ложь, я тем временем сумел «удалить». Остальная проблема по-прежнему заключается в том, что меню не воссоздается без перезагрузки ... Или это не произойдет для вас, если вы снова запустите скрипт? –

+0

btw в соответствии с [этим сообщением] (https://forums.adobe.com/message/2183887#2183887) даже «# targetengine» не является стойким к перезапуску InDesign. Кажется, есть некоторые более фундаментальные изменения для самих меню InDesigns ... –

+0

Я создал ADD | REMOVE | ADD | REMOVE и может подтвердить, что меню можно добавить после удаления на моей стороне. #targetengine не сохраняется при перезапуске InDesign. Конечно, вы не используете свой скрипт в папке сценариев запуска? Это может объяснить ваши проблемы. – Loic