如何删除(子)菜单及其存在的所有痕迹?

问题描述 投票:2回答:2

使用代码

#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”和“&Test”作为菜单名称),我也想修复它...

编辑结果这种奇怪的行为只发生在通过InDesign的脚本面板执行脚本时,但既不通过启动也不通过ExtendScript工具包。但是,删除后仍会保留菜单条目。

javascript menu adobe-indesign extendscript
2个回答
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 );

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将始终将帮助菜单放在右侧的最后位置。

© www.soinside.com 2019 - 2024. All rights reserved.