2016-06-23 31 views
1

den Code mitWie entferne ich ein (Sub-) Menü und alle seine Existenzspuren?

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

Ich habe später ein Untermenü InDesign-Menü, dass ich über

menu.remove(); 
delete menu; 
Leider

entfernt, wenn ich versuche, um das Menü zu erstellen, geschieht nichts, da InDesign es scheint zu denken, ist immer noch da - bis ich InDesign neu starte, danach erscheint das Menü (aber ohne hinzugefügte Elemente). Wie kann ich das Menü dauerhaft entfernen, damit es später neu erstellt werden kann, ohne InDesign neu starten zu müssen? Das Menü zeigt auch noch in InDesign-Menü Einstellungen auf (noch schlimmer, sogar zweimal, da ich „Test“ und „& Test“ als Menünamen versucht), die Ich mag würde auch reparieren ...

bearbeiten Dieses seltsame Verhalten tritt nur dann auf, wenn das Skript über das InDesign-Skriptfenster ausgeführt wird, aber weder über den Start noch über das ExtendScript-Toolkit. Die Menüeinträge bleiben jedoch nach dem Entfernen erhalten.

Antwort

1

Wenn Sie eine hartnäckige Sitzung verwenden, ist es praktisch, um zu überprüfen, was Sie tun. In Ihrem Fall bedeutet dies, dass Sie vor dem Hinzufügen eines Menüs auf mögliche Präexistenz prüfen müssen.

#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(); 

Secondary Punkt, ich glaube nicht, dass Sie eine Standortoption festlegen müssen wie jedes Menü in der Hauptmenüleiste hinzugefügt wird, kann nicht nach dem Hilfe-Menü platziert werden. Wenn ich nicht falsch liege, platziert InDesign das Hilfemenü immer auf der letzten Position auf der rechten Seite.

+0

Das Problem ist, auch nach 'menu.remove(); delete menu; ',' mainmenu.untermenus.items ("Test"). isValid' ist immer noch 'true' und das zuvor entfernte Menü wird erst angezeigt, wenn ich InDesign neu starte. Danach muss ich die Menüpunkte neu hinzufügen. –

+0

Hm, ich habe mir nie die Mühe gemacht, zu überprüfen, wo InDesign standardmäßig ein Menü platziert, aber das ist ein guter Punkt. –

+0

BTW, wenn ich die 'LocationOptions.before' weglasse, wird das neue Menü _after_" Help "hinzugefügt –

1

Es ist wahrscheinlich, dass Sie in früheren Versuchen zahlreiche Verweise auf das Menüobjekt erstellen und es ist eine persistente Engine, Referenzen bleiben am Leben.

InDesign neu starten und es sollte es tun.

Hier sind einige Screenshots, die ich aus dem beigefügten Skript gemacht habe. isValid variiert von wahr zu falsch, abhängig von der Phase des Skripts und der Menüexistenz.

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

Du hast recht,' isValid' ändert sich - ich muss ein globales herumliegen gehabt haben, das ich inzwischen "löschen" konnte. Das verbleibende Problem ist immer noch, dass das Menü ohne Neustart nicht neu erstellt wird ... Oder passiert das nicht, wenn Sie das Skript erneut ausführen? –

+0

BTW nach [dieser Beitrag] (https://forums.adobe.com/message/2183887#2183887) auch eine '# targetengine' ist nicht persistent über InDesign Neustarts. Es scheint etwas grundlegendere Änderung in den InDesigns Menüs selbst zu geben, die weitergehen ... –

+0

Ich schuf ADD | REMOVE | ADD | REMOVE und kann bestätigen, dass das Menü nach dem Entfernen auf meiner Seite hinzugefügt werden kann. #targetengine ist nicht in allen Neustarts von InDesign persistent. Natürlich ist es nicht, aber verwenden Sie Ihr Skript nicht in den Startscripts-Ordner? Das könnte deine Probleme erklären. – Loic