Eintrag im (Tab)Kontextmenü verschieben

  • Firefox-Version
    105.0.2 (64-Bit)
    Betriebssystem
    Windows 10 Version 21H2 (Build 19044.2006)

    Ich hätte gerne einen Eintrag im Tabkontextmenü verschoben, nur bekomme ich es nicht hin.

    So ist es =>

    und so hätte ich es gerne.

    Nur so sehr ich mich auch bemühe, ich bekomme es einfach nicht hin.

    Wie der Eintrag im Untermenü ausgeblendet wird weiss ich.

    CSS
    #context_closeOtherTabs  {
    display: none  !important;
    }

    Nur eben nicht, wie ich diesen "clonen", bzw verschieben kann.

    Mit <3lichem Gruß

    Mira

  • nur bekomme ich es nicht hin.

    Das geht auch nur per Script.

    Sieht dann so aus:

    Damit werden dann alle 3 Einträge verschoben.

  • Wenn du nur den einen Eintrag verschieben willst, dann musst du das im Script anpassen/auskommentieren.

    Sieht dann so aus:

  • Danke 2002Andreas das zweite Skript habe ich mir parallel gerade selbst erarbeitet!

    Was jetzt plötzlich stöhrt ist aber ganz unten ein Seperator!

    Mit

    CSS
    #tabContextMenu > menuseparator:nth-child(32) {
      display: none !important;
    }

    bekomme ich den aber nicht weg,

    zum Test habe ich andere ausgewählt, auch die gehen nicht weg.

    Geht das jetzt auch nur übers Skript?

    Mit <3lichem Gruß

    Mira

  • Hab den Fehler gefunden!!

    Der sitzt vor dem PC. ;(

    1. Der Seperator ist "#tabContextMenu > menuseparator:nth-child(31)"

    und nicht "#tabContextMenu > menuseparator:nth-child(32)"

    2. Bei "Aufzählungen" werden die Eintrage mit einem "," getrennt

    und nicht mit einem ";".

    Das wird sonnst nix, wie ich feststellen durfte.

    Danke für Deine Hilfe,

    vor allem für das Skript.

    Mit <3lichem Gruß

    Mira

  • Das Script stammt von aborix.

    Es verschiebt die Einträge aus einem Popup nur in das andere.

    Ich dachte etwas grundlegender.

    In welcher Zeile ist der Befehl zum Generieren, wo steht wo der neue Eintrag hin soll.

    Wo steht, dass der alte Eintrag gelöscht oder ausgeblendet werden soll.

    Hintergrund!

    Vielleicht möchte ich irgendwann mal einen anderen Eintrag aus einem anderen Popup verschieben,

    oder auch nur duplizieren, oder so.

    Mit <3lichem Gruß

    Mira

  • In welcher Zeile ist der Befehl zum Generieren

    Ich bin auch kein Fachmann für Scripte ;)

    Code
    menuitem.setAttribute('oncommand',
        'for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--) \
           gBrowser.removeTab(gBrowser.tabs[i], {animate: true})');

    wo der neue Eintrag hin soll.

    Code
     let refItem = document.getElementById('context_undoCloseTab');

    dass der alte Eintrag gelöscht oder ausgeblendet werden soll.

    Code
    tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);

    Ob das so wirklich passt, muss ein Fachmann bitte mal überprüfen.

  • Vielen lieben Dank.

    Werde mal schauen, ob ich eine Seite finde, wo ich die "Anweisungen" näher erklärt bekomme.

    UND hoffe, dass sich hier noch ein JavaSkript-Experte meldet.

    Das wäre wirklich schön.

    Mit <3lichem Gruß

    Mira

  • 2002Andreas Du hast ein Element menuitem erstellt, von dem ich aber nicht sehe, dass es anschließend überhaupt genutzt wird. Das kann also auch auskommentiert oder entfernt werden.

    ---

    Zur Erklärung der Zeilen:

    JavaScript
    let menuitem = document.createXULElement('menuitem');

    Es wird ein neues menuitem-Element erstellt und einer lokalen Variablen zugewiesen, welche dazu passend den Namen „menuitem“ trägt.

    JavaScript
    menuitem.setAttribute('oncommand', 'for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--) \ gBrowser.removeTab(gBrowser.tabs[i], {animate: true})');

    Dem neu erstellten Menüpunkt wird ein oncommand-Attribut zugewiesen. Das Script, welches hier als String hinterlegt worden ist, wird bei Klick auf den Menüpunkt ausgeführt.

    Ausgehend davon, dass menuitem aber in der Folge gar nicht genutzt wird, braucht es beides auch nicht.

    JavaScript
    let tabContextMenu = document.getElementById('tabContextMenu');
    let refItem = document.getElementById('context_undoCloseTab');

    Ähnlich zur menuitem-Zeile. Bloß statt ein neues Element zu erstellen, wird ein bereits bestehendes Element mit der ID #tabContextMenu ausgelesen und der lokalen Variable tabContextMenu zugewiesen. Gleiches mit #context_undoCloseTab und der lokalen Variable mit dem Namen „refItem“.

    Wichtig: Durch das Zuweisen zu einer lokalen Variable kann man in der Folge mit dem Element arbeiten. Nur durch das Zuweisen passiert gar nichts. Hier wird damit dann weiter gearbeitet:

    JavaScript
      tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);

    Die Methode Node.insertBefore() wird auf ein Eltern-Element angewendet, in dem Fall tabContextMenu. Der erste Parameter ist das Element, welches eingefügt werden soll. Statt ein neues Element zu erstellen, wird hier mittels document.getElementById('context_closeOtherTabs') das Element mit der ID #context_closeOtherTabs genommen (hätte natürlich genauso vorher einer lokalen Variable zugewiesen werden können). Der zweite Parameter ist das Referenz-Element, sprich das Element, vor dem das neue Element hinzugefügt werden soll.

    Der „Trick“ hier ist, dass wenn kein neues Element eingefügt wird, sondern ein bereits bestehendes Element als erster Parameter angegeben wird, dieses verschoben und nicht etwa dupliziert wird.

  • Danke Sören.

    Also, ...

    JavaScript
    (function() {
    
      if (location != 'chrome://browser/content/browser.xhtml')
        return;
    
      let refItem = document.getElementById('context_undoCloseTab');
      tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
    
    })();

    ... reicht!

    Nur wie setze ich das mit den Veriablen um?

    Variable setzen => let CloseTab = 'context_undoCloseTab';

    mit oder ohne ' , oder eher mit " ?

    Und wie wird dann diese Variable eingesetzt?

    let refItem = document.getElementById(${CloseTab});

    hat nicht funktioniert, ergo es ist was falsch.

    Mit <3lichem Gruß

    Mira

  • Yes!

    Hab's rausgefunden!

    JavaScript
    (function() {
      if (location != 'chrome://browser/content/browser.xhtml')
        return;
      let cs_undoTabs = "context_undoCloseTab";
      let cs_closeTabs = "context_closeOtherTabs"; 
      let refItem = document.getElementById(cs_undoTabs);
      tabContextMenu.insertBefore(document.getElementById(cs_closeTabs), refItem);
    })();

    Mit <3lichem Gruß

    Mira