1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Mira_Belle

Beiträge von Mira_Belle

  • Lesezeichen-Symbole (ausblenden)

    • Mira_Belle
    • 24. September 2024 um 09:51

    Ich habe zwei Versuche! Das Ergebnis wird aber wahrscheinlich nicht so sein, wie Du Dir das vorgestellt hast!

    Versuch 1:

    CSS
    .bookmark-item {
      &[container] {
        list-style-image: url("chrome://global/skin/icons/nix.svg")  !important;
      }
    }

    Versuch 2:

    CSS
    .bookmark-item[container] {
      fill: transparent !important;
    }

    Was Besseres fiel mir gerade nicht ein, aber keine Sorge Andreas wird das schon richten. ;)

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 23. September 2024 um 20:29

    So, hier erst einmal die "neuen" Buttons.
    Besser bekomme ich sie nicht hin!

    Dann habe ich auch entsprechend das Skript angepasst:

    Code
            // Symbole
            let DefaultIcon = "Button_groß.png";
            let AlternateIcon = "Button_klein-plus.png";

    Ich denke, ich mache hier an dieser Stelle erst einmal Pause.

    Mit Grafiken, dass diese auch wirklich schön aussehen, hab ich es nicht so.

    Es wäre echt schön, wenn da jemand bessere beisteuern könnte.

  • Google Maps Funktion wieder in Google Suche einbinden

    • Mira_Belle
    • 23. September 2024 um 17:33

    Na ja.
    Gib mal "wahl brandenburg" ein. Nach den "Schlagzeilen" braucht man im Grunde keine Nachrichtenseite mehr aufrufen.
    Ich finde das gegenüber den Nachrichtenseiten unfair. Aber wie ich schon schrieb, .... darf, kann und soll ...

  • Suchleiste funktioniert nicht mehr ohne Eingabe

    • Mira_Belle
    • 23. September 2024 um 16:52

    Aha, Danke.

    Jeder wie er mag. ;)

  • Suchleiste funktioniert nicht mehr ohne Eingabe

    • Mira_Belle
    • 23. September 2024 um 14:21

    So wirklich verstehe ich diese Diskussion nicht!

    Da kann ich doch VOR der Suche auswählen!

    :/

  • Google Maps Funktion wieder in Google Suche einbinden

    • Mira_Belle
    • 23. September 2024 um 14:12

    Sören Hentzschel Du hast definitiv recht! Aber genau deshalb schrieb ich, "viel Werbung und Unnützes". ;)
    Was für mich unnütz ist, entscheide ich und muss noch lange nicht für andere zutreffen!

    Google ist für mich eine Suchmaschine und hat mir außer Links nicht weiter anzuzeigen!
    Wenn ich genauere Infos haben möchte, steuere ich entsprechende Seiten an.
    Diese "Zusammenfassungen" auf http://www.google.com sind ja nicht wirklich gut und manches Mal
    steht da auch Stuss, deshalb mag ich das nicht!
    Und auch "geklaute" Inhalte von seriösen Seiten, mag ich nicht unterstützen!
    Aber wie immer, kann, darf ein jeder handhaben wie er will.

  • Google Maps Funktion wieder in Google Suche einbinden

    • Mira_Belle
    • 23. September 2024 um 11:41
    Zitat von captain chaos
    Zitat von Mira_Belle

    Ich rufe das ganze direkt über das "Adressfeld" auf!
    Für die Suche habe ich, damit ich nicht so viel Werbung und Unnützes angezeigt bekomme,
    &udm=14 als Standardsuchmaschine eingetragen.

    Klingt interessant, wo trage ich das ein?

    Z.B. Einstellungen / "Suche" ganz nach unten skrollen und auf "Weitere Suchmaschinen hinzufügen" klicken.
    Dann einfach "https://udm14.com/" als neue "Suchseite" eintragen.


    Zitat von 2002Andreas
    Zitat von Mira_Belle

    Ich habe das

    Ok, das blendet den Button zwar wieder ein, erklärt aber nicht, warum ein Klick auf die Karte nicht funktioniert wie bei Sören und mir.:/

    Stimmt! Da ist noch was im Busch!
    Zumal er ja auch das gleiche Problem hat, wenn er Google direkt aufruft! :/


    captain chaos Hast Du noch weitere Erweiterungen in Gebrauch? Wenn ja, deaktiviere mal alle manuell
    und gehe auf die Suche, welche Dir da zwischen funkt.

  • Google Maps Funktion wieder in Google Suche einbinden

    • Mira_Belle
    • 23. September 2024 um 11:31

    2002Andreas Oh, stimmt da war ja noch was!

    Ich habe das => https://addons.mozilla.org/de/firefox/add…ch-maps-button/

    Installiert!

  • Google Maps Funktion wieder in Google Suche einbinden

    • Mira_Belle
    • 23. September 2024 um 11:02

    :/

    Ich rufe das ganze direkt über das "Adressfeld" auf!
    Für die Suche habe ich, damit ich nicht so viel Werbung und Unnützes angezeigt bekomme,
    &udm=14 als Standardsuchmaschine eingetragen.

    Das Ergebnis schaut dann so aus:

    Wenn ich nun auf den Button "Maps" klicke, .... Tada, die Karte und wie Sören schon beschrieben hat, ...


    Nachtrag!

    Wenn ich direkt Google (http://www.google.de) aufrufe, dann sieht es bei mir auch genau so aus wie bei Sören.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 22. September 2024 um 19:27

    Und wieder ein kleiner Fix!
    Den beiden Ordnern "Firefox Verzeichnisse" und "Firefox Funktionen" können nun Symbole
    von der eigenen Festplatte zugeordnet werden.

    JavaScript
    // ==/UserScript==
    
        // Definiere den Profilpfad
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    
    var Appmenu = {
        // Beginn der Konfiguration ------------------
        
        // Editor mit angegebenem Pfad verwenden
        // editor: 'C:\\Program Files\\Notepad++\\notepad++.exe',
        editor: 'C:\\Program Files\\Microsoft VS Code\\Code.exe',
        // oder
        // in 'view_source.editor.path' eingetragenen Editor verwenden
        editor: Services.prefs.getCharPref('view_source.editor.path'),
        // Dateimanager mit angegebenem Pfad verwenden oder leer ('') wenn System-Dateimanager verwenden
        //fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe',
        fileManager: '',
        // Parameter für Dateimanager oder leer ('')
        //FMParameter: '/T',
        FMParameter: '',
        // Submenüs ohne Inhalt im Hauptmenü automatisch ausblenden
        autohideEmptySubDirs: true,
        // Submenüs im Hauptmenü nach unten verschieben
        moveSubDirstoBottom: false,
        // Ort und Aussehen des Menü-Buttons einstellen
     //   isUrlbar: 1,  // 0: TabsToolbar; 1: navbar,
        isUrlbar: 0,  // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar
        isButton: 0,  // 0: Hamburger,klein; 1: Firefox,groß,
        // Hotkey zum Öffnen des Appmenüs oder leer ('')
        hotkey: 'x',
        hotkeyModifier: 'alt', 
        
        // Ende der Konfiguration --------------------
    
        // Submenüs im Hauptmenü nach unten verschieben
        subdirPopupHash: [],
        subdirMenuHash: [],
    
        toolbar: {
            // Submenüs des Hauptmenüs definieren; Separator einfügen mit {name: 'separator'}
            subdirs: [
                {
                name: 'Firefox Verzeichnisse',
            //    image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJjb250ZXh0LWZpbGwgIzBiMGIwYiI+CiAgPHBhdGggZD0iTTE0IDNIOC4xNUw2LjU4IDEuNTRBMiAyIDAgMCAwIDUuMjIgMUgyYTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMnpNNS4yMiAzbDEuMDcgMUgyVjN6TTE0IDEzSDJWNWg2di0uMDFsLjE1LjAxSDE0eiIvPgo8L3N2Zz4K"
                image: `${ProfilePath}/default-browser-red.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
                },
                {
                name: 'Firefox Funktionen',
            //    image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljDQogICAtIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMNCiAgIC0gZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gLS0+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZmlsbD0iY29udGV4dC1maWxsIiA+DQogIDxwYXRoIGQ9Ik0xOTAuMzY4IDE1MC41OTFjMC4xNTcgMC4wMDkgMC4wNzkgMC4wMDMgMCAwem0tNTcuODc0LTI4LjkzM2MwLjE1OCAwLjAwOCAwLjA3OSAwLjAwMyAwIDB6bTM0Ni4yMjggNDQuNjc0Yy0xMC40NDUtMjUuMTIzLTMxLjYtNTIuMjQ4LTQ4LjIxMS02MC44MiAxMy41MiAyNi41IDIxLjM0NSA1My4wOTMgMjQuMzM1IDcyLjkzNSAwIDAuMDQgMC4wMTUgMC4xMzYgMC4wNDcgMC40LTI3LjE3NS02Ny43MzItNzMuMjU0LTk1LjA0Ny0xMTAuODg2LTE1NC41MTItMS45LTMuMDA4LTMuODA1LTYuMDIyLTUuNjYxLTkuMmE3My4yMzcgNzMuMjM3IDAgMCAxLTIuNjQ2LTQuOTcyIDQzLjc1NyA0My43NTcgMCAwIDEtMy41ODUtOS41IDAuNjI1IDAuNjI1IDAgMCAwLTAuNTQ2LTAuNjQ0IDAuOCAwLjggMCAwIDAtMC40NTEgMGMtMC4wMzMgMC4wMTEtMC4wODQgMC4wNTEtMC4xMTkgMC4wNjUtMC4wNTMgMC4wMi0wLjEyIDAuMDY5LTAuMTc2IDAuMDk1IDAuMDI2LTAuMDM2IDAuMDgzLTAuMTE3IDAuMS0wLjEzNS01My40MzcgMzEuMy03NS41ODcgODYuMDkzLTgxLjI4MiAxMjAuOTdhMTI4LjA1NyAxMjguMDU3IDAgMCAwLTQ3LjYyNCAxMi4xNTMgNi4xNDQgNi4xNDQgMCAwIDAtMy4wNDEgNy42MyA2LjAzNCA2LjAzNCAwIDAgMCA4LjE5MiAzLjUyNSAxMTYuMTc1IDExNi4xNzUgMCAwIDEgNDEuNDgxLTEwLjgyNmMwLjQ2OC0wLjAzMyAwLjkzNy0wLjA2MiAxLjQwNS0wLjFhMTE3LjYyNCAxMTcuNjI0IDAgMCAxIDUuOTMyLTAuMjExIDEyMC44MzEgMTIwLjgzMSAwIDAgMSAzNC40OTEgNC43NzdjMC42NTQgMC4xOTIgMS4yOTUgMC40MTQgMS45NDYgMC42MTZhMTIwLjE1IDEyMC4xNSAwIDAgMSA1LjUzOSAxLjg0MiAxMjEuODUyIDEyMS44NTIgMCAwIDEgMy45OTIgMS41NjRjMS4wNzQgMC40MzQgMi4xNDggMC44NjggMy4yMDYgMS4zMzFhMTE4LjQ1MyAxMTguNDUzIDAgMCAxIDQuOSAyLjMwN2MwLjc0MyAwLjM2OCAxLjQ4NSAwLjczNSAyLjIxNyAxLjExN2ExMjAuNTM1IDEyMC41MzUgMCAwIDEgNC42NzUgMi41ODcgMTA3Ljc4NSAxMDcuNzg1IDAgMCAxIDIuOTUyIDEuNzc2IDEyMy4wMTggMTIzLjAxOCAwIDAgMSA0Mi4wMjggNDMuNDc3Yy0xMi44MzMtOS4wMTUtMzUuODEtMTcuOTE4LTU3Ljk0Ny0xNC4wNjggODYuNDQxIDQzLjIxNCA2My4yMzQgMTkyLjAyNy01Ni41NDUgMTg2LjQwOGExMDYuNyAxMDYuNyAwIDAgMS0zMS4yNzEtNi4wMzEgMTMyLjQ2MSAxMzIuNDYxIDAgMCAxLTcuMDU5LTIuODg2Yy0xLjM1Ni0wLjYxOC0yLjcxMS0xLjI0My00LjA1MS0xLjkzNS0yOS4zNDktMTUuMTY4LTUzLjU4My00My44MzMtNTYuNjExLTc4LjY0MyAwIDAgMTEuMDkzLTQxLjMzNSA3OS40MzMtNDEuMzM1IDcuMzg4IDAgMjguNTA4LTIwLjYxNCAyOC45LTI2LjU5My0wLjA5LTEuOTUzLTQxLjkxNy0xOC41OS01OC4yMjMtMzQuNjU2LTguNzE0LTguNTg1LTEyLjg1MS0xMi43MjMtMTYuNTE0LTE1LjgyOWE3MS43IDcxLjcgMCAwIDAtNi4yMjUtNC43IDExMS4zMzUgMTExLjMzNSAwIDAgMS0wLjY3NS01OC43MzNjLTI0LjY4NyAxMS4yNDItNDMuODkgMjkuMDExLTU3Ljg0OSA0NC43aC0wLjExMWMtOS41MjgtMTIuMDY3LTguODU1LTUxLjg3My04LjMxMi02MC4xODQtMC4xMTQtMC41MTYtNy4xMDcgMy42My04LjAyNCA0LjI1NGExNzUuMjEgMTc1LjIxIDAgMCAwLTIzLjQ4NiAyMC4xMiAyMTAuNSAyMTAuNSAwIDAgMC0yMi40NDMgMjYuOTEzYzAgMC4wMTItMC4wMDcgMC4wMjUtMC4wMTEgMC4wMzcgMC0wLjAxMiAwLjAwNy0wLjAyNSAwLjAxMS0wLjAzOGEyMDIuODM3IDIwMi44MzcgMCAwIDAtMzIuMjQ0IDcyLjgxYy0wLjA1OCAwLjI2NS0yLjI5IDEwLjA1NC0zLjkyIDIyLjE0N2EyNjUuNzk0IDI2NS43OTQgMCAwIDAtMC43NjkgNS42NTFjLTAuNTU4IDMuNjM2LTAuOTkyIDcuNi0xLjQyIDEzLjc2Ny0wLjAxOSAwLjIzOS0wLjAzMSAwLjQ3NC0wLjA0OCAwLjcxMmE1OTEuMTUyIDU5MS4xNTIgMCAwIDAtMC40ODEgNy45OTVjMCAwLjQxMS0wLjAyNSAwLjgxNi0wLjAyNSAxLjIyNyAwIDEzMi43MDkgMTA3LjYgMjQwLjI5IDI0MC4zMjQgMjQwLjI5IDExOC44NjUgMCAyMTcuNTU5LTg2LjI4OCAyMzYuODgyLTE5OS42MyAwLjQwNy0zLjA3NSAwLjczMi02LjE2OCAxLjA5Mi05LjI3IDQuNzc3LTQxLjIxLTAuNTMtODQuNTI1LTE1LjU4OC0xMjAuNzQ3em0tMTY0LjA2OCA3Mi4xeiIvPg0KPC9zdmc+"
                image: `${ProfilePath}/default-browser-red.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
                },  
                {
                    name: 'separator',
                }, 
            ],
    
        apps: [  /*  Directories  */
    
            // Untermenü Firefox Verzeichnisse
            {
            name: 'Profil-Verzeichniss',
            id: 'AMProfil',
            root: 'ProfD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Chrome-Ordner',
            id: 'AMchrome',
            root: 'ProfD',
            path: '\\chrome',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'CSS-Ordner',
            id: 'AMCSS',
            root: 'ProfD',
            path: '\\chrome\\css',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'JS-Ordner',
            id: 'AMJS',
            root: 'ProfD',
            path: '\\chrome\\scripts',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Addon-Verzeichniss',
            id: 'AMAddons',
            root: 'ProfD',
            path: '\\extensions',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Programm-Verzeichniss',
            id: 'AMProgramm',
            root: 'CurProcD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Startup-Cache',
            id: 'AMCache',
            root: 'ProfLD',
            path: '\\startupCache',
            subdir: 'Firefox Verzeichnisse',
            },
        ],
    
        configs: [
    
            // Untermenü Firefox Funktionen
            {
            name: 'Anpassen',
            id: 'AMAnpassen',
            command: "gCustomizeMode.enter()",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Neustart im abgesicherten Modus',
            id: 'AMModus',
            command: "safeModeRestart();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Browser-Konsole',
            id: 'AMKonsole',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\
                    BrowserConsoleManager.openBrowserConsoleOrFocus();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Browser-Werkzeuge',
            id: 'AMWerkzeuge',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');\
                    BrowserToolboxLauncher.init();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Web-Entwickler',
            id: 'AMEntwickler',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { gDevToolsBrowser } = require('resource://devtools/client/framework/devtools-browser');\
                    gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",    
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Firefox synchronisieren',
            id: 'AMsynchron',
            command: "gSync.openPrefs('menubar');",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Zugangsdaten und Passwörter',
            id: 'AMdaten',
            command: "LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' })",
            tooltiptext: 'about:logins',
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Task Manager',
            id: 'AMManager',
            command: "switchToTabHavingURI('about:processes', true)",
            tooltiptext: 'about:processes',
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Offline arbeiten',
            id: 'AMOffline',
            command: "BrowserOffline.toggleOfflineStatus();",
            subdir: 'Firefox Funktionen',
            },
            /*
            {
            name: 'separator',
            },
            */
            {
            name: 'Neustart',
            id: 'AMreboot',
            tooltiptext: 'userChrome.js-Cache wird geleert',
    		command: 'Services.appinfo.invalidateCachesOnRestart(); \
                    Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);',
            },
            {
            name: 'Beenden',
            id: 'AMquit',
            command: "goQuitApplication(event);",
            },
        ]
        },
    
        _externalAppPopup: null,
        _isready: false,
    
        init: function() {
    
            this.handleRelativePath(this.toolbar.apps);
            const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    
            var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
            ExternalAppBtn.id = "AppMenuButton";
            ExternalAppBtn.setAttribute("label", "AppButton");
            ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
            ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
            ExternalAppBtn.setAttribute("type", "menu");
            ExternalAppBtn.setAttribute("removable", "true");
    
            // Definiere den Profilpfad
            let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'image'));
    
            // Symbole
            let DefaultIcon = "DefaultIcon.png";
            let AlternateIcon = "AlternateIcon.png";
    
            if (Appmenu.isButton) {
                ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${DefaultIcon}')`;
                ExternalAppBtn.style.width = "6%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
              } else {
                ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${AlternateIcon}')`;
                ExternalAppBtn.style.width = "3%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
                
              }
            if (Appmenu.isUrlbar === 1) {
                var navBar = document.getElementById("nav-bar-customization-target");
                navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
            } else if (Appmenu.isUrlbar === 2) {
                var menubar = document.getElementById("toolbar-menubar");
                menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
            } else {
                var TabsToolbar = document.getElementById("TabsToolbar");
                TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
            }
            
    
    
    
    
    
    
    
    
        var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
        //ExternalAppPopup.setAttribute('onpopupshowing', 'event.stopPropagation(); Appmenu.onpopupshowing();');
        ExternalAppPopup.setAttribute('id', 'AMpopup');
        this._externalAppPopup = ExternalAppPopup;
        ExternalAppBtn.appendChild(ExternalAppPopup);
        Appmenu.onpopupshowing();
        
          // Menü mit Tastaturkürzel öffnen
        let key = document.createXULElement('key');
        key.id = 'key_AppMenuPopup';
     //   key.setAttribute('key', 'X');
        key.setAttribute('key', Appmenu.hotkey);
            if (Appmenu.hotkeyModifier)
     //   key.setAttribute('modifiers', 'alt');
        key.setAttribute('modifiers', Appmenu.hotkeyModifier);
        key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
        document.getElementById('mainKeyset').appendChild(key);
        },
    
    
    
            /* ****** NEU ****** */     
    
        onpopupshowing: function() {
            if (this._isready)
                return;
            if (this._externalAppPopup === null)
                return;
            var ExternalAppPopup = this._externalAppPopup;
    
            // Funktion zum Erstellen eines Menüs mit Untermenüs
            function createMenuItem(parentPopup, item) {
                var menuItem;
                if (item.name == 'separator') {
                    menuItem = document.createXULElement('menuseparator');
                    parentPopup.appendChild(menuItem);
                } else if (item.submenu && item.submenu.length > 0) {
                    menuItem = document.createXULElement('menu');
                    var subMenuPopup = document.createXULElement('menupopup');
                    menuItem.appendChild(subMenuPopup);
                    menuItem.setAttribute('class', 'menu-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    parentPopup.appendChild(menuItem);
                    for (let subItem of item.submenu) {
                        createMenuItem(subMenuPopup, subItem);
                    }
                } else {
                    menuItem = document.createXULElement('menuitem');
                    menuItem.setAttribute('class', 'menuitem-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    if (item.command) {
                        menuItem.setAttribute('oncommand', item.command);
                    } else if (item.path) {
                        menuItem.setAttribute('oncommand', "Appmenu.exec(this.path, this.args);");
                        menuItem.path = item.path;
                        menuItem.args = item.args;
                    }
                    menuItem.setAttribute('tooltiptext', item.tooltiptext || item.name);
                    menuItem.setAttribute('id', item.id || "");
                    parentPopup.appendChild(menuItem);
                }
            }
    
            // Verarbeitung der Subdirs
            for (let subdir of this.toolbar.subdirs) {
                if (subdir.name == 'separator') {
                    ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
                } else {
                    var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
                    var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
                    subdirItem.setAttribute('class', 'menu-iconic');
                    subdirItem.setAttribute('label', subdir.name);
                    subdirItem.setAttribute('image', subdir.image);
                    Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
                    Appmenu.subdirMenuHash[subdir.name] = subdirItem;
                }
            }
    
            // Verarbeitung der Apps
            for (let app of this.toolbar.apps) {
                if (app.subdir && Appmenu.subdirPopupHash[app.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[app.subdir], app);
                } else {
                    createMenuItem(ExternalAppPopup, app);
                }
            }
    
            // Verarbeitung der Configs
            for (let config of this.toolbar.configs) {
                if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[config.subdir], config);
                } else {
                    createMenuItem(ExternalAppPopup, config);
                }
            }
    
            if (this.autohideEmptySubDirs) {
                for (let key in Appmenu.subdirPopupHash) {
                    if (Appmenu.subdirPopupHash[key].hasChildNodes()) {
                        continue;
                    } else {
                        Appmenu.subdirMenuHash[key].setAttribute("hidden", "true");
                    }
                }
            }
    
            if (this.moveSubDirstoBottom) {
                let i = ExternalAppPopup.childNodes.length;
                while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
                    ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
                }
            }
    
            this._isready = true;
        },
    
    
        handleRelativePath: function(apps) {
            for (let app of apps) {
                if (app.path) {
                    app.path = app.path.replace(/\//g, '\\');
                    var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
                    if (/^(\\)/.test(app.path)) {
                        app.path = ffdir + app.path;
                    }
                }
            }
        },
    
        exec: function(path, args) {
            args = args || [];
            var args_t = args.slice(0);
            for (let arg of args_t) {
                arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
            }
            var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            file.initWithPath(path);
            if (!file.exists()) {
                alert('Datei nicht gefunden: ' + path);
                return;
            }
            if (file.isExecutable() && !path.endsWith('.js')) {
                var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                process.init(file);
                process.run(false, args_t, args_t.length);
            } else if (file.isFile()) {
                if (this.editor) {
                    let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
                    UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
                    let path = UI.ConvertFromUnicode(file.path);
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.editor);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, [path], 1);
                } else {
                    file.launch();
                }
            } else if (file.isDirectory()) {
                if (this.fileManager) {
                    let args=[this.FMParameter,path];
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.fileManager);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, args, args.length);
                } else {
                    file.launch();
                }
            }
        },
    };
    
    
    (function() {
    
        // Definiere den Profilpfad für die Symbole
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    
        // Standard-Symbol-Dateiname
        let ButtonIcon01 = "restart.svg";
        let ButtonIcon02 = "quit.svg";
    
        let Icon01 = "profile.svg";
        let Icon02 = "chrome.svg";
        let Icon03 = "css3.svg";
        let Icon04 = "js.svg";
        let Icon05 = "addons.svg";
        let Icon06 = "folder.svg";
        let Icon07 = "folder-1.svg";
    
        let Icon11 = "Themes.svg";
        let Icon12 = "debugging-workers.svg";
        let Icon13 = "command-console.svg";
        let Icon14 = "window-dev-tools.svg";
        let Icon15 = "developer.svg";
        let Icon16 = "sync.svg";
        let Icon17 = "passwords.svg";
        let Icon18 = "performance.svg";
        let Icon19 = "plug-disconnected.svg";
    
    
        // StyleSheetService zum Hinzufügen der CSS-Regeln
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);       
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    
    
            #AMProfil   { background-image: url('${ProfilePath}/${Icon01}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMchrome   { background-image: url('${ProfilePath}/${Icon02}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMCSS      { background-image: url('${ProfilePath}/${Icon03}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMJS       { background-image: url('${ProfilePath}/${Icon04}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMAddons   { background-image: url('${ProfilePath}/${Icon05}');
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16pxx !important; /* Größe des Symbols anpassen */ 
                          }
            #AMProgramm { background-image: url('${ProfilePath}/${Icon06}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMCache    { background-image: url('${ProfilePath}/${Icon07}');
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
    
            #AMAnpassen     { background-image: url('${ProfilePath}/${Icon11}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMModus        { background-image: url('${ProfilePath}/${Icon12}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMKonsole      { background-image: url('${ProfilePath}/${Icon13}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMWerkzeuge    { background-image: url('${ProfilePath}/${Icon14}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMEntwickler   { background-image: url('${ProfilePath}/${Icon15}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMsynchron     { background-image: url('${ProfilePath}/${Icon16}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMdaten        { background-image: url('${ProfilePath}/${Icon17}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }        
            #AMManager      { background-image: url('${ProfilePath}/${Icon18}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMOffline      { background-image: url('${ProfilePath}/${Icon19}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
    
    
    
    
    
    
    
    
            /* Neustart-Button */
            #AMreboot { 
                background-image: url('${ProfilePath}/${ButtonIcon01}');
                background-repeat: no-repeat !important;
                background-position: 7px 5px !important;
                background-size: 20px 20px !important; /* Größe des Symbols anpassen */
                padding-left: 10px !important; /* Platz für das Symbol lassen */
                -moz-context-properties: fill, fill-opacity !important;
                fill: red !important;
            }
    
            /* Beenden-Button */
            #AMquit { 
                background-image: url('${ProfilePath}/${ButtonIcon02}');
                background-repeat: no-repeat !important;
                background-position: 9px 8px !important;
                background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                padding-left: 10px !important; /* Platz für das Symbol lassen */
                -moz-context-properties: fill, fill-opacity !important;
                fill: red !important;
            }
    
            /* Menüleiste ausblenden */
            #main-menubar > menu { 
                display: none !important; 
            }
    
        `), null, null);
    
        // CSS-Regeln registrieren
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
    })();
    
    if (window.gBrowser)
    Appmenu.init();
    Alles anzeigen

    Nun wird es eine kleine "Skriptpause" geben!
    Ich werde neu Buttons, welche dann hoffentlich nicht mehr "unscharf" sind, versuchen zu erstellen.

    Dazu brauche ich Zeit.

    Nachtrag!
    Ja, auch das Symbol für den Chromordner muss noch erstellt werden.
    Das Symbol, dass ja gerade Verwendung findet, ist zwar eindeutig, aber nicht wirklich passend.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 21. September 2024 um 13:36

    Update!

    Das erste Skript überarbeitet und die Zuordnung der Symbole in den CSS-Teil geschafft!
    Bekomme aber das mit den Ordnern noch nicht hin.
    Die Symbole für den Button selbst werde ich später nachliefern.
    Muss diese neu erstellen.

    JavaScript
    // ==/UserScript==
    
        // Definiere den Profilpfad
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'image'));
    
    var Appmenu = {
        // Beginn der Konfiguration ------------------
        
        // Editor mit angegebenem Pfad verwenden
        // editor: 'C:\\Program Files\\Notepad++\\notepad++.exe',
        editor: 'C:\\Program Files\\Microsoft VS Code\\Code.exe',
        // oder
        // in 'view_source.editor.path' eingetragenen Editor verwenden
        editor: Services.prefs.getCharPref('view_source.editor.path'),
        // Dateimanager mit angegebenem Pfad verwenden oder leer ('') wenn System-Dateimanager verwenden
        //fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe',
        fileManager: '',
        // Parameter für Dateimanager oder leer ('')
        //FMParameter: '/T',
        FMParameter: '',
        // Submenüs ohne Inhalt im Hauptmenü automatisch ausblenden
        autohideEmptySubDirs: true,
        // Submenüs im Hauptmenü nach unten verschieben
        moveSubDirstoBottom: false,
        // Ort und Aussehen des Menü-Buttons einstellen
     //   isUrlbar: 1,  // 0: TabsToolbar; 1: navbar,
        isUrlbar: 0,  // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar
        isButton: 0,  // 0: Hamburger,klein; 1: Firefox,groß,
        // Hotkey zum Öffnen des Appmenüs oder leer ('')
        hotkey: 'x',
        hotkeyModifier: 'alt', 
        
        // Ende der Konfiguration --------------------
    
        // Submenüs im Hauptmenü nach unten verschieben
        subdirPopupHash: [],
        subdirMenuHash: [],
    
        toolbar: {
            // Submenüs des Hauptmenüs definieren; Separator einfügen mit {name: 'separator'}
            subdirs: [
                {
                name: 'Firefox Verzeichnisse',
            //    image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJjb250ZXh0LWZpbGwgIzBiMGIwYiI+CiAgPHBhdGggZD0iTTE0IDNIOC4xNUw2LjU4IDEuNTRBMiAyIDAgMCAwIDUuMjIgMUgyYTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMnpNNS4yMiAzbDEuMDcgMUgyVjN6TTE0IDEzSDJWNWg2di0uMDFsLjE1LjAxSDE0eiIvPgo8L3N2Zz4K"
                image: `${ProfilePath}/default-browser-red.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
                },
                {
                name: 'Firefox Funktionen',
            //    image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljDQogICAtIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMNCiAgIC0gZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gLS0+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZmlsbD0iY29udGV4dC1maWxsIiA+DQogIDxwYXRoIGQ9Ik0xOTAuMzY4IDE1MC41OTFjMC4xNTcgMC4wMDkgMC4wNzkgMC4wMDMgMCAwem0tNTcuODc0LTI4LjkzM2MwLjE1OCAwLjAwOCAwLjA3OSAwLjAwMyAwIDB6bTM0Ni4yMjggNDQuNjc0Yy0xMC40NDUtMjUuMTIzLTMxLjYtNTIuMjQ4LTQ4LjIxMS02MC44MiAxMy41MiAyNi41IDIxLjM0NSA1My4wOTMgMjQuMzM1IDcyLjkzNSAwIDAuMDQgMC4wMTUgMC4xMzYgMC4wNDcgMC40LTI3LjE3NS02Ny43MzItNzMuMjU0LTk1LjA0Ny0xMTAuODg2LTE1NC41MTItMS45LTMuMDA4LTMuODA1LTYuMDIyLTUuNjYxLTkuMmE3My4yMzcgNzMuMjM3IDAgMCAxLTIuNjQ2LTQuOTcyIDQzLjc1NyA0My43NTcgMCAwIDEtMy41ODUtOS41IDAuNjI1IDAuNjI1IDAgMCAwLTAuNTQ2LTAuNjQ0IDAuOCAwLjggMCAwIDAtMC40NTEgMGMtMC4wMzMgMC4wMTEtMC4wODQgMC4wNTEtMC4xMTkgMC4wNjUtMC4wNTMgMC4wMi0wLjEyIDAuMDY5LTAuMTc2IDAuMDk1IDAuMDI2LTAuMDM2IDAuMDgzLTAuMTE3IDAuMS0wLjEzNS01My40MzcgMzEuMy03NS41ODcgODYuMDkzLTgxLjI4MiAxMjAuOTdhMTI4LjA1NyAxMjguMDU3IDAgMCAwLTQ3LjYyNCAxMi4xNTMgNi4xNDQgNi4xNDQgMCAwIDAtMy4wNDEgNy42MyA2LjAzNCA2LjAzNCAwIDAgMCA4LjE5MiAzLjUyNSAxMTYuMTc1IDExNi4xNzUgMCAwIDEgNDEuNDgxLTEwLjgyNmMwLjQ2OC0wLjAzMyAwLjkzNy0wLjA2MiAxLjQwNS0wLjFhMTE3LjYyNCAxMTcuNjI0IDAgMCAxIDUuOTMyLTAuMjExIDEyMC44MzEgMTIwLjgzMSAwIDAgMSAzNC40OTEgNC43NzdjMC42NTQgMC4xOTIgMS4yOTUgMC40MTQgMS45NDYgMC42MTZhMTIwLjE1IDEyMC4xNSAwIDAgMSA1LjUzOSAxLjg0MiAxMjEuODUyIDEyMS44NTIgMCAwIDEgMy45OTIgMS41NjRjMS4wNzQgMC40MzQgMi4xNDggMC44NjggMy4yMDYgMS4zMzFhMTE4LjQ1MyAxMTguNDUzIDAgMCAxIDQuOSAyLjMwN2MwLjc0MyAwLjM2OCAxLjQ4NSAwLjczNSAyLjIxNyAxLjExN2ExMjAuNTM1IDEyMC41MzUgMCAwIDEgNC42NzUgMi41ODcgMTA3Ljc4NSAxMDcuNzg1IDAgMCAxIDIuOTUyIDEuNzc2IDEyMy4wMTggMTIzLjAxOCAwIDAgMSA0Mi4wMjggNDMuNDc3Yy0xMi44MzMtOS4wMTUtMzUuODEtMTcuOTE4LTU3Ljk0Ny0xNC4wNjggODYuNDQxIDQzLjIxNCA2My4yMzQgMTkyLjAyNy01Ni41NDUgMTg2LjQwOGExMDYuNyAxMDYuNyAwIDAgMS0zMS4yNzEtNi4wMzEgMTMyLjQ2MSAxMzIuNDYxIDAgMCAxLTcuMDU5LTIuODg2Yy0xLjM1Ni0wLjYxOC0yLjcxMS0xLjI0My00LjA1MS0xLjkzNS0yOS4zNDktMTUuMTY4LTUzLjU4My00My44MzMtNTYuNjExLTc4LjY0MyAwIDAgMTEuMDkzLTQxLjMzNSA3OS40MzMtNDEuMzM1IDcuMzg4IDAgMjguNTA4LTIwLjYxNCAyOC45LTI2LjU5My0wLjA5LTEuOTUzLTQxLjkxNy0xOC41OS01OC4yMjMtMzQuNjU2LTguNzE0LTguNTg1LTEyLjg1MS0xMi43MjMtMTYuNTE0LTE1LjgyOWE3MS43IDcxLjcgMCAwIDAtNi4yMjUtNC43IDExMS4zMzUgMTExLjMzNSAwIDAgMS0wLjY3NS01OC43MzNjLTI0LjY4NyAxMS4yNDItNDMuODkgMjkuMDExLTU3Ljg0OSA0NC43aC0wLjExMWMtOS41MjgtMTIuMDY3LTguODU1LTUxLjg3My04LjMxMi02MC4xODQtMC4xMTQtMC41MTYtNy4xMDcgMy42My04LjAyNCA0LjI1NGExNzUuMjEgMTc1LjIxIDAgMCAwLTIzLjQ4NiAyMC4xMiAyMTAuNSAyMTAuNSAwIDAgMC0yMi40NDMgMjYuOTEzYzAgMC4wMTItMC4wMDcgMC4wMjUtMC4wMTEgMC4wMzcgMC0wLjAxMiAwLjAwNy0wLjAyNSAwLjAxMS0wLjAzOGEyMDIuODM3IDIwMi44MzcgMCAwIDAtMzIuMjQ0IDcyLjgxYy0wLjA1OCAwLjI2NS0yLjI5IDEwLjA1NC0zLjkyIDIyLjE0N2EyNjUuNzk0IDI2NS43OTQgMCAwIDAtMC43NjkgNS42NTFjLTAuNTU4IDMuNjM2LTAuOTkyIDcuNi0xLjQyIDEzLjc2Ny0wLjAxOSAwLjIzOS0wLjAzMSAwLjQ3NC0wLjA0OCAwLjcxMmE1OTEuMTUyIDU5MS4xNTIgMCAwIDAtMC40ODEgNy45OTVjMCAwLjQxMS0wLjAyNSAwLjgxNi0wLjAyNSAxLjIyNyAwIDEzMi43MDkgMTA3LjYgMjQwLjI5IDI0MC4zMjQgMjQwLjI5IDExOC44NjUgMCAyMTcuNTU5LTg2LjI4OCAyMzYuODgyLTE5OS42MyAwLjQwNy0zLjA3NSAwLjczMi02LjE2OCAxLjA5Mi05LjI3IDQuNzc3LTQxLjIxLTAuNTMtODQuNTI1LTE1LjU4OC0xMjAuNzQ3em0tMTY0LjA2OCA3Mi4xeiIvPg0KPC9zdmc+"
                image: "${ProfilePath}/default-browser-red.svg", // Der Pfad wird direkt verwendet, ohne `url()`
                },  
                {
                    name: 'separator',
                }, 
            ],
    
        apps: [  /*  Directories  */
    
            // Untermenü Firefox Verzeichnisse
            {
            name: 'Profil-Verzeichniss',
            id: 'AMProfil',
            root: 'ProfD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Chrome-Ordner',
            id: 'AMchrome',
            root: 'ProfD',
            path: '\\chrome',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'CSS-Ordner',
            id: 'AMCSS',
            root: 'ProfD',
            path: '\\chrome\\css',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'JS-Ordner',
            id: 'AMJS',
            root: 'ProfD',
            path: '\\chrome\\scripts',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Addon-Verzeichniss',
            id: 'AMAddons',
            root: 'ProfD',
            path: '\\extensions',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Programm-Verzeichniss',
            id: 'AMProgramm',
            root: 'CurProcD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            },
            {
            name: 'Startup-Cache',
            id: 'AMCache',
            root: 'ProfLD',
            path: '\\startupCache',
            subdir: 'Firefox Verzeichnisse',
            },
        ],
    
        configs: [
    
            // Untermenü Firefox Funktionen
            {
            name: 'Anpassen',
            id: 'AMAnpassen',
            command: "gCustomizeMode.enter()",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Neustart im abgesicherten Modus',
            id: 'AMModus',
            command: "safeModeRestart();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Browser-Konsole',
            id: 'AMKonsole',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\
                    BrowserConsoleManager.openBrowserConsoleOrFocus();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Browser-Werkzeuge',
            id: 'AMWerkzeuge',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');\
                    BrowserToolboxLauncher.init();",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Web-Entwickler',
            id: 'AMEntwickler',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { gDevToolsBrowser } = require('resource://devtools/client/framework/devtools-browser');\
                    gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",    
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Firefox synchronisieren',
            id: 'AMsynchron',
            command: "gSync.openPrefs('menubar');",
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Zugangsdaten und Passwörter',
            id: 'AMdaten',
            command: "LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' })",
            tooltiptext: 'about:logins',
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Task Manager',
            id: 'AMManager',
            command: "switchToTabHavingURI('about:processes', true)",
            tooltiptext: 'about:processes',
            subdir: 'Firefox Funktionen',
            },
            {
            name: 'Offline arbeiten',
            id: 'AMOffline',
            command: "BrowserOffline.toggleOfflineStatus();",
            subdir: 'Firefox Funktionen',
            },
            /*
            {
            name: 'separator',
            },
            */
            {
            name: 'Neustart',
            id: 'AMreboot',
            tooltiptext: 'userChrome.js-Cache wird geleert',
    		command: 'Services.appinfo.invalidateCachesOnRestart(); \
                    Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);',
            },
            {
            name: 'Beenden',
            id: 'AMquit',
            command: "goQuitApplication(event);",
            },
        ]
        },
    
        _externalAppPopup: null,
        _isready: false,
    
        init: function() {
    
            this.handleRelativePath(this.toolbar.apps);
            const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    
            var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
            ExternalAppBtn.id = "AppMenuButton";
            ExternalAppBtn.setAttribute("label", "AppButton");
            ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
            ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
            ExternalAppBtn.setAttribute("type", "menu");
            ExternalAppBtn.setAttribute("removable", "true");
    
            // Definiere den Profilpfad
            let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'image'));
    
            // Symbole
            let DefaultIcon = "DefaultIcon.png";
            let AlternateIcon = "AlternateIcon.png";
    
            if (Appmenu.isButton) {
                ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${DefaultIcon}')`;
                ExternalAppBtn.style.width = "6%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
              } else {
                ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${AlternateIcon}')`;
                ExternalAppBtn.style.width = "3%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
                
              }
            if (Appmenu.isUrlbar === 1) {
                var navBar = document.getElementById("nav-bar-customization-target");
                navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
            } else if (Appmenu.isUrlbar === 2) {
                var menubar = document.getElementById("toolbar-menubar");
                menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
            } else {
                var TabsToolbar = document.getElementById("TabsToolbar");
                TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
            }
            
    
    
    
    
    
    
    
    
        var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
        //ExternalAppPopup.setAttribute('onpopupshowing', 'event.stopPropagation(); Appmenu.onpopupshowing();');
        ExternalAppPopup.setAttribute('id', 'AMpopup');
        this._externalAppPopup = ExternalAppPopup;
        ExternalAppBtn.appendChild(ExternalAppPopup);
        Appmenu.onpopupshowing();
        
          // Menü mit Tastaturkürzel öffnen
        let key = document.createXULElement('key');
        key.id = 'key_AppMenuPopup';
     //   key.setAttribute('key', 'X');
        key.setAttribute('key', Appmenu.hotkey);
            if (Appmenu.hotkeyModifier)
     //   key.setAttribute('modifiers', 'alt');
        key.setAttribute('modifiers', Appmenu.hotkeyModifier);
        key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
        document.getElementById('mainKeyset').appendChild(key);
        },
    
    
    
            /* ****** NEU ****** */     
    
        onpopupshowing: function() {
            if (this._isready)
                return;
            if (this._externalAppPopup === null)
                return;
            var ExternalAppPopup = this._externalAppPopup;
    
            // Funktion zum Erstellen eines Menüs mit Untermenüs
            function createMenuItem(parentPopup, item) {
                var menuItem;
                if (item.name == 'separator') {
                    menuItem = document.createXULElement('menuseparator');
                    parentPopup.appendChild(menuItem);
                } else if (item.submenu && item.submenu.length > 0) {
                    menuItem = document.createXULElement('menu');
                    var subMenuPopup = document.createXULElement('menupopup');
                    menuItem.appendChild(subMenuPopup);
                    menuItem.setAttribute('class', 'menu-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    parentPopup.appendChild(menuItem);
                    for (let subItem of item.submenu) {
                        createMenuItem(subMenuPopup, subItem);
                    }
                } else {
                    menuItem = document.createXULElement('menuitem');
                    menuItem.setAttribute('class', 'menuitem-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    if (item.command) {
                        menuItem.setAttribute('oncommand', item.command);
                    } else if (item.path) {
                        menuItem.setAttribute('oncommand', "Appmenu.exec(this.path, this.args);");
                        menuItem.path = item.path;
                        menuItem.args = item.args;
                    }
                    menuItem.setAttribute('tooltiptext', item.tooltiptext || item.name);
                    menuItem.setAttribute('id', item.id || "");
                    parentPopup.appendChild(menuItem);
                }
            }
    
            // Verarbeitung der Subdirs
            for (let subdir of this.toolbar.subdirs) {
                if (subdir.name == 'separator') {
                    ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
                } else {
                    var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
                    var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
                    subdirItem.setAttribute('class', 'menu-iconic');
                    subdirItem.setAttribute('label', subdir.name);
                    subdirItem.setAttribute('image', subdir.image);
                    Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
                    Appmenu.subdirMenuHash[subdir.name] = subdirItem;
                }
            }
    
            // Verarbeitung der Apps
            for (let app of this.toolbar.apps) {
                if (app.subdir && Appmenu.subdirPopupHash[app.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[app.subdir], app);
                } else {
                    createMenuItem(ExternalAppPopup, app);
                }
            }
    
            // Verarbeitung der Configs
            for (let config of this.toolbar.configs) {
                if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[config.subdir], config);
                } else {
                    createMenuItem(ExternalAppPopup, config);
                }
            }
    
            if (this.autohideEmptySubDirs) {
                for (let key in Appmenu.subdirPopupHash) {
                    if (Appmenu.subdirPopupHash[key].hasChildNodes()) {
                        continue;
                    } else {
                        Appmenu.subdirMenuHash[key].setAttribute("hidden", "true");
                    }
                }
            }
    
            if (this.moveSubDirstoBottom) {
                let i = ExternalAppPopup.childNodes.length;
                while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
                    ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
                }
            }
    
            this._isready = true;
        },
    
    
        handleRelativePath: function(apps) {
            for (let app of apps) {
                if (app.path) {
                    app.path = app.path.replace(/\//g, '\\');
                    var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
                    if (/^(\\)/.test(app.path)) {
                        app.path = ffdir + app.path;
                    }
                }
            }
        },
    
        exec: function(path, args) {
            args = args || [];
            var args_t = args.slice(0);
            for (let arg of args_t) {
                arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
            }
            var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            file.initWithPath(path);
            if (!file.exists()) {
                alert('Datei nicht gefunden: ' + path);
                return;
            }
            if (file.isExecutable() && !path.endsWith('.js')) {
                var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                process.init(file);
                process.run(false, args_t, args_t.length);
            } else if (file.isFile()) {
                if (this.editor) {
                    let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
                    UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
                    let path = UI.ConvertFromUnicode(file.path);
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.editor);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, [path], 1);
                } else {
                    file.launch();
                }
            } else if (file.isDirectory()) {
                if (this.fileManager) {
                    let args=[this.FMParameter,path];
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.fileManager);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, args, args.length);
                } else {
                    file.launch();
                }
            }
        },
    };
    
    
    (function() {
    
        // Definiere den Profilpfad für die Symbole
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    
        // Standard-Symbol-Dateiname
        let ButtonIcon01 = "restart.svg";
        let ButtonIcon02 = "quit.svg";
    
        let Icon01 = "profile.svg";
        let Icon02 = "chrome.svg";
        let Icon03 = "css3.svg";
        let Icon04 = "js.svg";
        let Icon05 = "addons.svg";
        let Icon06 = "folder.svg";
        let Icon07 = "folder-1.svg";
    
        let Icon11 = "Themes.svg";
        let Icon12 = "debugging-workers.svg";
        let Icon13 = "command-console.svg";
        let Icon14 = "window-dev-tools.svg";
        let Icon15 = "developer.svg";
        let Icon16 = "sync.svg";
        let Icon17 = "passwords.svg";
        let Icon18 = "performance.svg";
        let Icon19 = "plug-disconnected.svg";
    
    
        // StyleSheetService zum Hinzufügen der CSS-Regeln
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);       
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    
    
            #AMProfil   { background-image: url('${ProfilePath}/${Icon01}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMchrome   { background-image: url('${ProfilePath}/${Icon02}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMCSS      { background-image: url('${ProfilePath}/${Icon03}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMJS       { background-image: url('${ProfilePath}/${Icon04}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMAddons   { background-image: url('${ProfilePath}/${Icon05}');
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16pxx !important; /* Größe des Symbols anpassen */ 
                          }
            #AMProgramm { background-image: url('${ProfilePath}/${Icon06}'); 
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
            #AMCache    { background-image: url('${ProfilePath}/${Icon07}');
                          background-repeat: no-repeat !important; 
                          background-position: 11px 7px !important; 
                          background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                          }
    
            #AMAnpassen     { background-image: url('${ProfilePath}/${Icon11}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMModus        { background-image: url('${ProfilePath}/${Icon12}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMKonsole      { background-image: url('${ProfilePath}/${Icon13}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMWerkzeuge    { background-image: url('${ProfilePath}/${Icon14}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMEntwickler   { background-image: url('${ProfilePath}/${Icon15}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
            #AMsynchron     { background-image: url('${ProfilePath}/${Icon16}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMdaten        { background-image: url('${ProfilePath}/${Icon17}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }        
            #AMManager      { background-image: url('${ProfilePath}/${Icon18}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important; 
                              background-size: 16px 16px !important;
                            }
            #AMOffline      { background-image: url('${ProfilePath}/${Icon19}');
                              background-repeat: no-repeat !important; 
                              background-position: 11px 7px !important;
                              background-size: 16px 16px !important;
                            }
    
    
    
    
    
    
    
    
            /* Neustart-Button */
            #AMreboot { 
                background-image: url('${ProfilePath}/${ButtonIcon01}');
                background-repeat: no-repeat !important;
                background-position: 7px 5px !important;
                background-size: 20px 20px !important; /* Größe des Symbols anpassen */
                padding-left: 10px !important; /* Platz für das Symbol lassen */
                -moz-context-properties: fill, fill-opacity !important;
                fill: red !important;
            }
    
            /* Beenden-Button */
            #AMquit { 
                background-image: url('${ProfilePath}/${ButtonIcon02}');
                background-repeat: no-repeat !important;
                background-position: 9px 8px !important;
                background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                padding-left: 10px !important; /* Platz für das Symbol lassen */
                -moz-context-properties: fill, fill-opacity !important;
                fill: red !important;
            }
    
            /* Menüleiste ausblenden */
            #main-menubar > menu { 
                display: none !important; 
            }
    
        `), null, null);
    
        // CSS-Regeln registrieren
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
    })();
    
    if (window.gBrowser)
    Appmenu.init();
    Alles anzeigen

    Das zweite Skript habe ich dahingehend überarbeitet,
    dass nun ein Separator das "gespiegelte" Menü abgrenzt.

    JavaScript
    (function () {
        setTimeout(async function () {
            // Menüs einfügen 
            var pane1 = document.getElementById('AMpopup');
            var item2 = document.getElementById('AMreboot');        
            var mb = document.getElementById('main-menubar');
            // clone menues
            const menuItems = [...mb.children].filter(m => m.tagName.toLowerCase() === "menu");
    
            menuItems.forEach((m, index) => {
                let cl = m.cloneNode(true);
                let t = cl.querySelector('.menubar-text');
                if (t) cl.removeChild(t);
                cl = item2.parentNode.insertBefore(cl, item2);
    
                // Nur nach dem letzten Eintrag einen Separator einfügen
                if (index === menuItems.length - 1) {
                    var separator = document.createXULElement('menuseparator');
                    separator.setAttribute('flex', '1');
                    pane1.insertBefore(separator, item2);
                }
            });
    
            // bind event
            let source = await readSource('chrome://browser/content/browser-menubar.js');
            source = source.replace(/.*let mainMenuBar/is, 'let mainMenuBar')
                           .replace(/},\n\s+{ once: true }.*/is, '')
                           .replace("main-menubar", "AMpopup")
                           .replace('.getElementById("historyMenuPopup")', '.querySelector("#AMpopup #historyMenuPopup")')
                           .replaceAll('getElementById("history-menu")', 'querySelector("#AMpopup #history-menu")')
                           .replace('.getElementById("menu_EditPopup")', '.querySelector("#AMpopup #menu_EditPopup")');
            
            eval(source);
    
            async function readSource(url) {
                return new Promise(resolve => {
                    let xhr = new XMLHttpRequest();
                    xhr.open('GET', url);
                    xhr.onload = function () {
                        resolve(xhr.responseText);
                    };
                    xhr.send();
                });
            }
        }, 300);
    })();
    Alles anzeigen

    Alle Symbole icons.zip

    Falls jemand ein neues Symbol für den Chome-Ordner erstellen mag,
    ich hätte da nichts dagegen. 8o
    Ich dachte da an einen Ordner (nur obere Hälfte) wo ein Schriftzug "chome" integriert ist.
    Wäre echt toll. :*

    Für die Symbole der "gespiegelten" (geklonten) Menüleiste, wird es dann noch eine separate Datei geben!
    Aber das wird noch etwas dauern.

  • Startseite von Firefox

    • Mira_Belle
    • 21. September 2024 um 08:21

    Mh, Bilder sagen mehr aus, als tausend Worte!
    Und da wäre ja dann auch noch die Sprachbarriere und eben Missverständnisse.

  • Überlagerungen auf Websites

    • Mira_Belle
    • 21. September 2024 um 00:27

    Mit Windows 8.1 hinkst Du aber wirklich ein wenig weit hinterher!

    Windows 10 kann man mittlerweile ganz gut händeln und dem nach Hause telefonieren den gar aus machen!

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 20. September 2024 um 22:51

    Hier das vorläufige Ergebnis!

    Es funktioniert so weit! Aber es ist noch etwas feinschliff nötig!
    Der Button für das Menü, ob groß oder klein, ist etwas unscharf, muss noch behoben werden.
    Die Symbole möchte ich in einen CSS-Teil auslagern und
    die "gespiegelten" Menüs der Menüleiste haben ja noch keine Symbole.

    Auch der Header soll und muss Neu!

    Zwar basiert das erste Skript auf eine Vorlage von aborix,
    aber ist mittlerweile so weit verändert, dass es mit der Vorlage nicht mehr viel gemein hat!

    Das zweite Skript stammt von Jizz!
    Es ist nahezu unverändert und braucht noch einen Header!

    Hier erst einmal die Vorversionen:

    JavaScript
    // ==/UserScript==
    
    
    
    var Appmenu = {
        // Beginn der Konfiguration ------------------
        
        // Editor mit angegebenem Pfad verwenden
        // editor: 'C:\\Program Files\\Notepad++\\notepad++.exe',
        editor: 'C:\\Program Files\\Microsoft VS Code\\Code.exe',
        // oder
        // in 'view_source.editor.path' eingetragenen Editor verwenden
        editor: Services.prefs.getCharPref('view_source.editor.path'),
        // Dateimanager mit angegebenem Pfad verwenden oder leer ('') wenn System-Dateimanager verwenden
        //fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe',
        fileManager: '',
        // Parameter für Dateimanager oder leer ('')
        //FMParameter: '/T',
        FMParameter: '',
        // Submenüs ohne Inhalt im Hauptmenü automatisch ausblenden
        autohideEmptySubDirs: true,
        // Submenüs im Hauptmenü nach unten verschieben
        moveSubDirstoBottom: false,
        // Ort und Aussehen des Menü-Buttons einstellen
     //   isUrlbar: 1,  // 0: TabsToolbar; 1: navbar,
        isUrlbar: 0,  // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar
        isButton: 0,  // 0: Hamburger,klein; 1: Firefox,groß,
        // Hotkey zum Öffnen des Appmenüs oder leer ('')
        hotkey: 'x',
        hotkeyModifier: 'alt', 
        
        // Ende der Konfiguration --------------------
    
        // Submenüs im Hauptmenü nach unten verschieben
        subdirPopupHash: [],
        subdirMenuHash: [],
        toolbar: {
            // Submenüs des Hauptmenüs definieren; Separator einfügen mit {name: 'separator'}
            subdirs: [
                {
                name: 'Firefox Verzeichnisse',
                image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJjb250ZXh0LWZpbGwgIzBiMGIwYiI+CiAgPHBhdGggZD0iTTE0IDNIOC4xNUw2LjU4IDEuNTRBMiAyIDAgMCAwIDUuMjIgMUgyYTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMnpNNS4yMiAzbDEuMDcgMUgyVjN6TTE0IDEzSDJWNWg2di0uMDFsLjE1LjAxSDE0eiIvPgo8L3N2Zz4K"
                },
                {
                name: 'Firefox Funktionen',
                image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljDQogICAtIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMNCiAgIC0gZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gLS0+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZmlsbD0iY29udGV4dC1maWxsIiA+DQogIDxwYXRoIGQ9Ik0xOTAuMzY4IDE1MC41OTFjMC4xNTcgMC4wMDkgMC4wNzkgMC4wMDMgMCAwem0tNTcuODc0LTI4LjkzM2MwLjE1OCAwLjAwOCAwLjA3OSAwLjAwMyAwIDB6bTM0Ni4yMjggNDQuNjc0Yy0xMC40NDUtMjUuMTIzLTMxLjYtNTIuMjQ4LTQ4LjIxMS02MC44MiAxMy41MiAyNi41IDIxLjM0NSA1My4wOTMgMjQuMzM1IDcyLjkzNSAwIDAuMDQgMC4wMTUgMC4xMzYgMC4wNDcgMC40LTI3LjE3NS02Ny43MzItNzMuMjU0LTk1LjA0Ny0xMTAuODg2LTE1NC41MTItMS45LTMuMDA4LTMuODA1LTYuMDIyLTUuNjYxLTkuMmE3My4yMzcgNzMuMjM3IDAgMCAxLTIuNjQ2LTQuOTcyIDQzLjc1NyA0My43NTcgMCAwIDEtMy41ODUtOS41IDAuNjI1IDAuNjI1IDAgMCAwLTAuNTQ2LTAuNjQ0IDAuOCAwLjggMCAwIDAtMC40NTEgMGMtMC4wMzMgMC4wMTEtMC4wODQgMC4wNTEtMC4xMTkgMC4wNjUtMC4wNTMgMC4wMi0wLjEyIDAuMDY5LTAuMTc2IDAuMDk1IDAuMDI2LTAuMDM2IDAuMDgzLTAuMTE3IDAuMS0wLjEzNS01My40MzcgMzEuMy03NS41ODcgODYuMDkzLTgxLjI4MiAxMjAuOTdhMTI4LjA1NyAxMjguMDU3IDAgMCAwLTQ3LjYyNCAxMi4xNTMgNi4xNDQgNi4xNDQgMCAwIDAtMy4wNDEgNy42MyA2LjAzNCA2LjAzNCAwIDAgMCA4LjE5MiAzLjUyNSAxMTYuMTc1IDExNi4xNzUgMCAwIDEgNDEuNDgxLTEwLjgyNmMwLjQ2OC0wLjAzMyAwLjkzNy0wLjA2MiAxLjQwNS0wLjFhMTE3LjYyNCAxMTcuNjI0IDAgMCAxIDUuOTMyLTAuMjExIDEyMC44MzEgMTIwLjgzMSAwIDAgMSAzNC40OTEgNC43NzdjMC42NTQgMC4xOTIgMS4yOTUgMC40MTQgMS45NDYgMC42MTZhMTIwLjE1IDEyMC4xNSAwIDAgMSA1LjUzOSAxLjg0MiAxMjEuODUyIDEyMS44NTIgMCAwIDEgMy45OTIgMS41NjRjMS4wNzQgMC40MzQgMi4xNDggMC44NjggMy4yMDYgMS4zMzFhMTE4LjQ1MyAxMTguNDUzIDAgMCAxIDQuOSAyLjMwN2MwLjc0MyAwLjM2OCAxLjQ4NSAwLjczNSAyLjIxNyAxLjExN2ExMjAuNTM1IDEyMC41MzUgMCAwIDEgNC42NzUgMi41ODcgMTA3Ljc4NSAxMDcuNzg1IDAgMCAxIDIuOTUyIDEuNzc2IDEyMy4wMTggMTIzLjAxOCAwIDAgMSA0Mi4wMjggNDMuNDc3Yy0xMi44MzMtOS4wMTUtMzUuODEtMTcuOTE4LTU3Ljk0Ny0xNC4wNjggODYuNDQxIDQzLjIxNCA2My4yMzQgMTkyLjAyNy01Ni41NDUgMTg2LjQwOGExMDYuNyAxMDYuNyAwIDAgMS0zMS4yNzEtNi4wMzEgMTMyLjQ2MSAxMzIuNDYxIDAgMCAxLTcuMDU5LTIuODg2Yy0xLjM1Ni0wLjYxOC0yLjcxMS0xLjI0My00LjA1MS0xLjkzNS0yOS4zNDktMTUuMTY4LTUzLjU4My00My44MzMtNTYuNjExLTc4LjY0MyAwIDAgMTEuMDkzLTQxLjMzNSA3OS40MzMtNDEuMzM1IDcuMzg4IDAgMjguNTA4LTIwLjYxNCAyOC45LTI2LjU5My0wLjA5LTEuOTUzLTQxLjkxNy0xOC41OS01OC4yMjMtMzQuNjU2LTguNzE0LTguNTg1LTEyLjg1MS0xMi43MjMtMTYuNTE0LTE1LjgyOWE3MS43IDcxLjcgMCAwIDAtNi4yMjUtNC43IDExMS4zMzUgMTExLjMzNSAwIDAgMS0wLjY3NS01OC43MzNjLTI0LjY4NyAxMS4yNDItNDMuODkgMjkuMDExLTU3Ljg0OSA0NC43aC0wLjExMWMtOS41MjgtMTIuMDY3LTguODU1LTUxLjg3My04LjMxMi02MC4xODQtMC4xMTQtMC41MTYtNy4xMDcgMy42My04LjAyNCA0LjI1NGExNzUuMjEgMTc1LjIxIDAgMCAwLTIzLjQ4NiAyMC4xMiAyMTAuNSAyMTAuNSAwIDAgMC0yMi40NDMgMjYuOTEzYzAgMC4wMTItMC4wMDcgMC4wMjUtMC4wMTEgMC4wMzcgMC0wLjAxMiAwLjAwNy0wLjAyNSAwLjAxMS0wLjAzOGEyMDIuODM3IDIwMi44MzcgMCAwIDAtMzIuMjQ0IDcyLjgxYy0wLjA1OCAwLjI2NS0yLjI5IDEwLjA1NC0zLjkyIDIyLjE0N2EyNjUuNzk0IDI2NS43OTQgMCAwIDAtMC43NjkgNS42NTFjLTAuNTU4IDMuNjM2LTAuOTkyIDcuNi0xLjQyIDEzLjc2Ny0wLjAxOSAwLjIzOS0wLjAzMSAwLjQ3NC0wLjA0OCAwLjcxMmE1OTEuMTUyIDU5MS4xNTIgMCAwIDAtMC40ODEgNy45OTVjMCAwLjQxMS0wLjAyNSAwLjgxNi0wLjAyNSAxLjIyNyAwIDEzMi43MDkgMTA3LjYgMjQwLjI5IDI0MC4zMjQgMjQwLjI5IDExOC44NjUgMCAyMTcuNTU5LTg2LjI4OCAyMzYuODgyLTE5OS42MyAwLjQwNy0zLjA3NSAwLjczMi02LjE2OCAxLjA5Mi05LjI3IDQuNzc3LTQxLjIxLTAuNTMtODQuNTI1LTE1LjU4OC0xMjAuNzQ3em0tMTY0LjA2OCA3Mi4xeiIvPg0KPC9zdmc+"
                },  
                {
                    name: 'separator',
                }, 
            ],
    
        apps: [  /*  Directories  */
    
            // Untermenü Firefox Verzeichnisse
            {
            name: 'Profil',
            root: 'ProfD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qzc3OTM4REU3NkFEMTFFMkJGRDBENEQyQ0IxOTY5MEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qzc3OTM4REY3NkFEMTFFMkJGRDBENEQyQ0IxOTY5MEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNzc5MzhEQzc2QUQxMUUyQkZEMEQ0RDJDQjE5NjkwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNzc5MzhERDc2QUQxMUUyQkZEMEQ0RDJDQjE5NjkwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pk3JkLkAAAL0SURBVHjadJPba1xVFMZ/+8yZMZ3MZCaJSUNaWqkkKY2k2kDwWm21lgRMhBSFWpJC60MVLIXqkz70DyiIF1A0iLRoK1YtJA+2Sm0CQWIg+GATgiUwkmSSSWaSmcz1XLbrTEZTxC7Yh7XXWetb37ps9dZXU3jiuPoHy3H7XFejuUeU8j4VHXxy9xvqus/gZc9gena9CdD36UBnWddbIfzz3ztGxX7mynSfYeiybmploPVmzsHPJyg5Dt5VSSbD/wDmWozI8El2hDPk8rCcj2AOXMXQFp6jaZshcG0sK8fQ6S7EjFSBIfB+0d978SiPHQgSqW9nLQO5yTnWLp0SynY5sXFw/DiHf30FxwhQkICPbsfJ2XBrAX5JQ2Ylgatq0L46HN1IYNt2CqsJurs7eeH5RzE8Bo4ZvIxZhSsA+1uaGBqb50gz1AQo027pfJrd7e0cPfYUr5/rpVgsYdnuZduWElzUt5aj+n8b+ZpP1h9iJS/Ugg287w/w9jMNjLS10XnkIOvzKySTa2QzOUqhRoqF4mtoVaWGzj2nu7qPo1wL7TrSGIEMPsj56wliiQz1/jyXTlBuaCqVJr64RLhhP+HaRiZGvsS0LIfG3Y8wfuUCyvDJaGQ8AvJh76sCFoX0LMnYn2QC25lfWGZjbpJd9TPsGfyMknTclPmTT/1FKBisAGxOPjZxlVD8R5r3thHYd4b1uTvkMinMpgN07Jxh9ZuXZJR7ZA+0wkkvEqreJgCGZNesdrzLrp+eYEf/G/ir8lS1Pknt42dpy8p4kjepXb9GsFBN17UPMFwBMAsJojUhoqFqIuEQ1ugF/L4iti6R+v0L4t91Idgon4kz2sPq1BCWU5JkUkK2YN/+fnjsWf3vAisJ9NPaXGBjaZas7IKW3qYuVpbbRxksuDRTdvesD8uJ8h/54x0m3aY6WcfAPS+CrVdi2bjxFcyP3zx0d+vReNlNeqI3GJ7m7GGSF4Wmyf+IVG7/PMt5xf0lUmF3Px+P0t2/BRgAgYA3fi+XoFwAAAAASUVORK5CYII='
            },
            {
            name: 'chrome',
            root: 'ProfD',
            path: '\\chrome',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII='
            },
            {
            name: 'CSS',
            root: 'ProfD',
            path: '\\chrome\\css',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAatJREFUeNqkU7tKA0EUPbM7boISNKhBsLRQ9AMECx8EEQstgqVgL1iYyg+w1UbwC6ziA1TyA7FKjCKiYCGihSAIikiIJptZ7527amIjmmWHnXNn7jn3tSoIAjTzOGjy0cerI2umZtKB+VskylFwXGdds/Pw/AzgG8ByKHrV901OUYV2i41stYP81mFaW+X3MnC5IZctgabkaBmfbDWWo9VCe18WKw0tgX21dfJfgbE9IJEUlccjIJcKbWNi200Ao3X4fNkKasvml8R5p5OUSSn1IPXly9txCreNoCc40wG0tAJ9czZV6UJQEVavHYh2A9lB2sfENr4PuKTjeoInDmhPIqZS30Y/7EkkXFEhyA6QigvM3oo920+XGN8RQcmm4NiicWVtoSkd8wZMnRK1K0T5BTnjCBgXQmyqoilVp91zEZi+ksPnEyIg7skzwU9FiSBZCM+LX63VtkWc48UKfalY1Rdpo0fFyyXDvruNmKOL9dj2ap4oRIgkiMscRLuk759DZIXUDwzrw7765rG8icz1YuMoq18GObDO7Ms3KRb0/vNfulfN/s4fAgwAwWWMUVTgPhoAAAAASUVORK5CYII='
            },
            {
            name: 'JS',
            root: 'ProfD',
            path: '\\chrome\\scripts',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAC4gAAAuIAeWOKUkAAAEZSURBVDhP7ZMxLENRFIa/c2l5ESrFI+KpoUQTRoOYTJp0NBgsFpP5xSAxWNgkNlYJo72L3SIhMRiaaCxdRKIRkfQet+81FhUPsTnLvfnPzfefc3Ku6MW08oswrfPH8Q/4c8DohjKyFt+7AmVix5I/ULIlG4tfAfoXlb75eE+mDiGzIBgPctuG9HCkJ2tBOpTunPB4DrfrwvWS8lqTZioZQBvCQ9nirwqFU6Vn9n17kw+xEhqqu5a079o5MgwuR3NoD0j5sYO4tLbMmq61Y8NVUXipKAOlT1oINi0zZ8L4lsWbjB/3zlkKJ+KclSB0VYw5/S4if/yNKVdiECpeHp5vlOqe0HgSskXL0IrQmYH6JdzvO73eBvCtgDf14FTmcYgI3gAAAABJRU5ErkJggg=='
            },
            {
            name: 'Addons',
            root: 'ProfD',
            path: '\\extensions',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjbQg61aAAACkUlEQVQ4T43T60tTYRwH8HMQ9QQJRSBJ50xU8BL1QpJMsbxNc162edxcYlAoZdkFh6gZurF5WV6nc7M/oBdBb7q9DSPEVBDbZtN0c5tzNymolwXht2eDhVO0Dnx4Hn6/5/me8xx4KOqQR2rcYfjpIC81BpXiqWBnxUSgpWQ0kHrY+gN1xdOdu/XTQfDGIMSGAET6AMpG/TbhiD/uv0LqTYF7cmPgN2/wQzzhh2jMB+Gwz1I65I3/Z8A1o5eRTXqP85M+pVTv260Z86JieNtcMridXNjnZvI1Lia31xV7IIgf99AKg/e1wrAN+YQHtXoPJKNbqBrewlWdG6UDLlzRupCv3sTFns3vFx47SqJCFHoPoyAb5eNb4MlGyYgb1UNuiHQulPW7UKRx4rJqE5d6HMjpdiC7066mRFpHvFTnbCHuSJ84E+rIJumQExKdEzVE5YAT5RoHCnvsyO3aQHb7Os63rSHrwRoy76+qqErNBi/ut4PYrdFsKCWDDoj77CjvXUdu+yqyWleQcsuK5GYrBE0WcE0Wm6DZmsk1W7VEI1XRu6YUqb6gUh22W9BhQ8ZtCwQ3PoEjQuM+psi5SSBNCR/Zusq7bSju+IyMpmWwjUvgrh+hcWks6scVKs0tBQ/NSG5YBKtYNHOKRRxt4WUogKufTwmh8lqXU9MaFlY42UcLJ5tnOfk8yPwov0j/LfGNUIe/huXnYrm6uTiOn2UI7GEjcxMxTrwifu7rq6KOw0o+MAT2SI8sYGtnaVJ/s68fFUCfONd2jK2e+cFWv0dY1bu+mPiTocsTmyR8kU56X//2wmtmuiMvoMkkdEkEp3K0N08XPZsKScwzdNB0zFlSz0pIaxBG6mQ0JBU/1yXmm878AbFQoHrb98HyAAAAAElFTkSuQmCC'
            },
            {
            name: 'Programm',
            root: 'CurProcD',
            path: '\\',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAB0AAAAzAAAAQgAAAEUAAAA4AAAAIwAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKgQAIngOFHPPHiGf9hwnsv4aK7H+HCid9BYmiNoNEVGWAAAAOQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAADhISZ4oiJaj4JTfD/yVDzf8lTNP/JU/X/yVT2f8lUNL/HDas/g4bbJsAAAAaAAAAAAAAAAAAAAAAAAAAACAmkVYeKLn+JT7I/yVL0/8lVNr/JVrd/yVf3/8lZuL/JW3k/yVk4P8bT9P+HkXBjAAAAAAAAAAAAAAAABoaaxMeMbXqJT/K/yVN1v8lWN3/JmDf/ytSr/81OWr/M0qL/yZ64/8jiez/JXXh/x9Msv4ITLo/AAAAAAAAAAAiN6B3JT7I/yVN1v8lWd3/JV3d/ytEnv81J1T/SiIe/04iFf9BISL/I6HV/xus7v8hhtn/JVCofAAAAAAAAAAAIEGw0SVL0/8lV9z/JVnb/yZn4P8oct7/Jnjg/ydjt/9RUE3/WCgR/zp3fv8axfb/EMj1/xmC0LQAAAAAAAAAABxKxv0lVNr/Jl/f/ydCyf84WaX/a0AX/3NMHP9lZEf/dUQT/2cyDf9ZNB//Q9j3/ybh/P8ap9X1AAAAAAAAAAAbWM/8JVve/yZm4P8mWNP/Nkh+/3JXLf+aWgv/mFkL/4tNBv+ARQf/bTcH/6Pw+v977v7/Opuz/gB/fwIAAAAAIWHV5SZf4P8ma+H/Jnfk/yOP5/9QZYT/qXAm/7NyHP+qaBX/mVkN/4xPCP+dtKv/lu3+/yOy1uUAAAAAAAAAAB1exJElZeL/Jm7i/yZ+5f8iheD/QHDX/2uAk//DiRP/vH4V/7V0GP+jZRn/rbKa/4js//8AyOONAAAAAAAAAAAdU7JGJVnY/yZw4/8kguX/IJLg/4p4N/+wjhv/0p0F/9GaCf/FiRD/sHkv/8Ts8P+L4/L/DcbnTQAAAAAAAAAAGVnYFB5m3P12eX39coBn/02bp/92i1H/1qYb/+GvIf/cqQz/yJId/8SlaP+539//Za/KtwAAAAAAAAAAAAAAAAAAAAAiguZSv5tRZMKXQPXBkiX/xKU3/+a2Qf/rvEj/5bQ4/9OpQP/XyZ7vkqmnegAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkwWkd5cBimOe/X+TswV7+7sNe/um/X+HivWeRzbBOGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
            },
            {
            name: 'Startup-Cache',
            root: 'ProfLD',
            path: '\\startupCache',
            subdir: 'Firefox Verzeichnisse',
            image: 'data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1wcREBAg9OD7NAAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAH6SURBVHjaxVNBaxNBFP4mGRNp06bSaGu9qXhRLOSQX6Dg0d48SMWC4Mmbv8AfYA7Sgp6UgteCF29CKahBsKKWglgam4rRxGxiks3u7Mz6zZIlSVHRk7N8vLcz7/vemzczwP8eorSCgtLJJeXpUGtMBQHgK5RptxbuYJUx5o8CL5bx+OzCkyuZ2cLIwtPihbVW9a1GiCyFQyusFD4S2zfv4x5DtI2TAphOZk8zbXFE4NKt5ctInDmY8OLd6zNrtI+IlhURG0Xs55dezZXXF9Gq7CA9NQvNbAH19W/wo+6gWXeaN1aQkybEXLv2Bb36Z+SvfUAynYLgB9Y+GLEv6Sl4HTdcvX0yy4kZqdkit1nFWC4Pme4ydvMXxNiOwwTfIVP5OCBlK0Cv8Y4C5xnXYM+bB0ixTwjWHwpUdzbh+ijZSWlYQefrcxwrLJJcIZxRAWM33qP1KTCOwJ9ErbyLno8trvqRgOrsITV5ik6pT2IXvbZdINmjVr8CmYMx09h7/8wKMBtUtIWgu4/DE8e5lxob4pLsDkhhvxJrjYfE2Am065/Et1ZUQRAJTBxJIDQJZrgKZDiRwYA03AlxCF1Ho92oYGM7ElCS5/qmVjXzLx+cg71tMex5D/8Pw+ng4etd2GYpER0ucJRI26v9l2/Ivg82CI2YIP+BPCyifwI91AzKs/qQkQAAAABJRU5ErkJggg=='
            },
        ],
    
        configs: [
    
            // Untermenü Firefox Funktionen
            {
            name: 'Anpassen',
            command: "gCustomizeMode.enter()",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAdhsAAHYbAfWG3pUAAAHbSURBVDhPY2QgA6jVnZD8958pmuH3zwXMUDGigVrjWZc/HMJ7f7MJBTD9/PSaJBeoNp5P+cMpPP0vAysL0/cP71m+vdJhgsoRBMq1p8t/sQnN+vufhYXx17f/zN/fJt/ptH9GlAFKFcfqfrMKdvz7y8D4/+d3Buavr1rvdtisB8kRNECxcH/lL2b+xr9//jP8//WDgeXLy8WMv3/UQaUZ8IaBWuGe3C8sQpP+M7MBFf5nYP31fiPLv5+hdye4/oYqYcAZCwsO3ArX1VScff7RD8bfv/8wsP58t4n597ewe5M94JpBAKsB3VuumnILSmzg5eVlkxXh+H/r7qNV/39+i7w/1QtFMwhgGFC26rIEB5/IXkYOPuGvP38x/PnyZrK6BGvaxhLrv1AlKAAlDM7n8vIttzmyjVNSzZrpz4/fvz+9ymsJUJ8BlcYK4C64XsQdK8z+c7fS22Oqpzmd3n758tm3J1RzDVQaJwC7YL2FAru+4au3ovzfuH98ZGS49YLP33r9x01gFQQAOB18estk8/46G/evtwwM79+wvGX4+28vWJYIwLhARUmA+8+//XyMvwx+szK+/cLCHBlx7dFuqDxBAHQBo9YPJqbVz5k4Q9/85VAgRTMDAwMDAIpDuk3/mjFSAAAAAElFTkSuQmCC'
            },
    
            {
            name: 'Neustart im abgesicherten Modus',
            command: "safeModeRestart();",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACh0lEQVQ4jY2SW0iTARzFz7cvRfqclA7Lpi51tjlnikukB3VKFzQC02UPmQaVRqlpRqiVLak0UUIxsVroTAsFTUzmJY1u0HUJ2YWCVg9RCWEPZauETk8+zJZ1ns/vxx/+B5gnmZlZuRZL23W5XK6Yr+c2OwsOhFg7Lz28Zx/n9pzdVQaDwWNeoKAgT9vQUJfX2Tuw2dpqbXxhM3+6032E7VcG2HI7jcdbiu2l+8pKy0vLTWtS1+coFIoAF0GgWmucsOb/mmyP43SPjt/bwJt1ETSf3sa6JwKrHCKzbkRS1x/FDcUb7RKkKNcTfPziu7MSf07lg9/OgzNN4Mdd4IkGsPYNWDYBqgZAtAqMSNHdAqB1FXh765tXJ315HwR+zQFn1oHOMLC6Hix3gPn3QekiiAYZdQmRQwCCXXhJqYw+m5DkfA3w83LQ6Q9Oi2BBBWgaB402EI2gUCNjVLJhGECQi8DDf1F0fVKy8wHAtwqBk34CJ0WBm/aAQTZQbgFRA4pVMuoTY0YAqOY+IjxtS+XUyoxhphfeZW7FU2YUPqO5MYHdI6ClF2zqBGvPiYyO1fYDCJgrUCSkFz2XbX1Jn8IPVB91MqDsB082p9I+DI72gYM9oOWMnEuXqZoBSH9sITY2rss3bYhIe0zP7FcUTA4erDZy9CrY0wX294JFxUoCC3e4HZOPl5i9am0FoRkkDNeIyDGWHIqjrQ/s6wFbL8io0QY7AGjcCgD4rlCrbCExlYRkJcQ2luyP5Ngw2GEFjSn+BBaY/wbPJj40NPCRWptDQTjGwr3hPFUN6nSLCXhcBrDkXwIAMEiS2BGm1k/p9BrKRK93AGoAKP8Hns1iACYAhwEkAvB0V/oNnDMV0lvYzsIAAAAASUVORK5CYII='
            },
            {
            name: 'Browser-Konsole',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\
                    BrowserConsoleManager.openBrowserConsoleOrFocus();",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACwElEQVQ4jU2TS28SURiG5yf5G1xo1KqJd43aJkYTEzfGuNSdMV5jotVYG6vponipF3BKL7SAlrZWipbeLdABBsoMMMOAU+48LuaYuHhzvrP5zvs933mlOJAGNoVUIAPEbNBFvS2UAmLAOpAQdylQh8G4xf05hdvftrgzneLRnEbvQpnHP0rcnda4F9K5N5Pj4XeN++Ect2dTPFnM8j7bQLoShsPDCsfdCc5Naez/orJ3LM8+v8ku12/2+i12j+bYM5LlyGSe0+MZTni26JmyuL4C0sGxBodkk0v+PBeDObq8GQ74S5yKdDgabtIV+sMeX4F9vjzHfRrn5E3OuxMckwvsd5tI5ydtetPgM2BC3eGzDu90eJsFjwkjFnwRp1eHYMYiZEBfCi6M6UgnvTqfGg4wo9VC+w9ktgWaAKgBuQ7YjQplYNSGHjmB1OU3GKyBSoOF9VnkSJQVCyzABqpABSgBfwDYxqaC3IIT4zGkQ8Earg4Ugbga5albZnQ9gwEUOlAGtBYU/jVoK1Qp8cGGUxMq0pERGCo5LzRp415WuDu2wEINFBylhIoAdQ27WSXYhG6PiXR2uMWc6B5dWmPAF0HeqqIA3qRFX/AXDz3feOL9QSRVhB0LOjBThsvvS0hXXAbzFTBMUFYTLCXKaG2HQaIIkU2DUDTD9JKOVmjDTg2aECnCjY860vURg4AFZgeaODMXO46jShvMqgOzDNhtaLccsLMmXBuOI3VPKLytw6r434rIRk4oI1asiqykRBYGS3BGXka6GorzYKPEi5hB/3KGobUi8lYVn1JjKlEloNTxrJl44jZvYhYuxeJVssKtJY2by3mkmWIH12Kagfk4r8NxXoZWeT4V4dnkPP1ff9IfXKR3fJ6BmTWeBaI8DqzwNLTBQDjJnA2SBShVx3YaSAq7qqhTYiz1vwingWTLWetfmUuJaUgo1TsAAAAASUVORK5CYII='
            },
            {
            name: 'Browser-Werkzeuge',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');\
                    BrowserToolboxLauncher.init();",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC',
            },
            {
            name: 'Web-Entwickler',
            command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { gDevToolsBrowser } = require('resource://devtools/client/framework/devtools-browser');\
                    gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",    
            subdir: 'Firefox Funktionen',
            image: 'data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAB0AAAAzAAAAQgAAAEUAAAA4AAAAIwAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKgQAIngOFHPPHiGf9hwnsv4aK7H+HCid9BYmiNoNEVGWAAAAOQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAADhISZ4oiJaj4JTfD/yVDzf8lTNP/JU/X/yVT2f8lUNL/HDas/g4bbJsAAAAaAAAAAAAAAAAAAAAAAAAAACAmkVYeKLn+JT7I/yVL0/8lVNr/JVrd/yVf3/8lZuL/JW3k/yVk4P8bT9P+HkXBjAAAAAAAAAAAAAAAABoaaxMeMbXqJT/K/yVN1v8lWN3/JmDf/ytSr/81OWr/M0qL/yZ64/8jiez/JXXh/x9Msv4ITLo/AAAAAAAAAAAiN6B3JT7I/yVN1v8lWd3/JV3d/ytEnv81J1T/SiIe/04iFf9BISL/I6HV/xus7v8hhtn/JVCofAAAAAAAAAAAIEGw0SVL0/8lV9z/JVnb/yZn4P8oct7/Jnjg/ydjt/9RUE3/WCgR/zp3fv8axfb/EMj1/xmC0LQAAAAAAAAAABxKxv0lVNr/Jl/f/ydCyf84WaX/a0AX/3NMHP9lZEf/dUQT/2cyDf9ZNB//Q9j3/ybh/P8ap9X1AAAAAAAAAAAbWM/8JVve/yZm4P8mWNP/Nkh+/3JXLf+aWgv/mFkL/4tNBv+ARQf/bTcH/6Pw+v977v7/Opuz/gB/fwIAAAAAIWHV5SZf4P8ma+H/Jnfk/yOP5/9QZYT/qXAm/7NyHP+qaBX/mVkN/4xPCP+dtKv/lu3+/yOy1uUAAAAAAAAAAB1exJElZeL/Jm7i/yZ+5f8iheD/QHDX/2uAk//DiRP/vH4V/7V0GP+jZRn/rbKa/4js//8AyOONAAAAAAAAAAAdU7JGJVnY/yZw4/8kguX/IJLg/4p4N/+wjhv/0p0F/9GaCf/FiRD/sHkv/8Ts8P+L4/L/DcbnTQAAAAAAAAAAGVnYFB5m3P12eX39coBn/02bp/92i1H/1qYb/+GvIf/cqQz/yJId/8SlaP+539//Za/KtwAAAAAAAAAAAAAAAAAAAAAiguZSv5tRZMKXQPXBkiX/xKU3/+a2Qf/rvEj/5bQ4/9OpQP/XyZ7vkqmnegAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkwWkd5cBimOe/X+TswV7+7sNe/um/X+HivWeRzbBOGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
            },
            {
            name: 'Firefox synchronisieren',
            command: "gSync.openPrefs('menubar');",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADcElEQVR4nHVTXWxTZRh+zzntOafn9Gdt3enoz8po2dauMLYat6iom5OpCwMGmswrLjRecAGBkDkTkCtCiDeQaGKCF7vQoBL0gpARJyFTxCDQwqA/6Nba/bU9Xdedru1pe3441Y2MGJ7kTb683/c835PvfT4E1jB66E2zQ2/4WG8wD+KUzmgwvsCwqYWSUC4VVSKXZsz6B6HH8c+OnPslBRuArS8yCzGqu9075vG2tkp8zhwLXieTM0HdcipmSubKlv1793Q1O5kjO1u08nfXo5P/Ezh/bOh0y9bNfdmFx8AmQiBUy4ChKFTxhspAfy9eb9ICRWCow2rqfcOjt34zEb3yVODCSM9Aq8t+vlLioLiSVjoIEFojqEmtfPt+5F5yOkgE7tymljJpqDfqwLmpzv+iiwpfmow/QmsCjYzxKzUiAggFIEkCArH83G+h9JiAGVJ3Zrh9uNpkUxH4udzyMvx6609IZ5Zg21b7F7WbsAuf9HXsaLYdl8QKIDLA71MJ9tufA+2hxeSP2z3t5MXxwJUbIVacCC6N7+5u7K7T0e4iXwUrU6exm/AfVEaafI8kcUVMBgRB4G5k/uzfSWBrzkY+v3hq44trCOKMXke/TRI4rBYqyA6P/SBKooJP2QCNYp3AcQhPZ6/Cc/Aono3ptBTUSo0TgKtU9agoVUVRFoE2bQKDmYF3X201P0+gKsrv6LQ0/FcUZLjSFJpcKl+ORKJA1VlBZ2uHXT0vndxIOjzUNliblt8P6ja3daRGpCgSaJqSI3H2Kpb/IxHydpo/RRAJtTZ3gaO5Y8vwK0z+y+9v3lKI6Ae97gkCFfS9Ps/Z9/v9XprSQKEkQI7jY/tGL5/E4gBSf5ezMfzwfudKJgFN23ZCQ9uu/pHhzuEOO/gseqxn4HXfa2+97LNqaQ1kuRJUBFEOhGc/unQjGkbWE/n10e7p2bk5Z21Em5tcYHe6gZ2bWTVoMK3DYYEtThtwRQHiC1lYzhXGDpz46SD8G7k1WCxAjw75g8nFRffKagkaLPW8BhXIRpsVXC4nJNJFKPIVKFeF8Idnrm1XKMIzf6FQAPnuP8I9iqI5bxNjL/CSSlKRMsej0oNpVszl+TxfFVO5QuVmdDExns9D9RkHa1AxDOOUZdmGYeBCAXHUzoiC9JcS9HklaPMsy8aUnrhOeALXrFu6bGkawwAAAABJRU5ErkJggg=='
            },
            {
            name: 'Zugangsdaten und Passwörter',
            command: "LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' })",
            tooltiptext: 'about:logins',
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwACTowAAk6MAZI9dFgAAAFSSURBVDhPzVG9SgNBGPxmQ4qAZ7SRVKIIom+gIBbaWagIigg2iZVgkc4HER8jiL2dnaAgNqJGU4gaYsIR4w/J3Tq7dwb0vFOwcWCY/b7dmf2TvwKhxsI9zDqUBXKQvCL3s1PuC9UiMYDmSUqJzNlGgAo5z5BTU8QG0NxHOScHTI0mWtLEse7XE5LRt2yNM+RVmckYLJPWbNHCYu9KYxqeFFkNkXOmnRQwHKqFzvmzPNWI7tEzQUNGjcQH+JIJRx/YJi/JJVPgGR2j3wbY+yvJh2UUbQZUcWCGcSdYgwuHx4yC+6Kqdp31xokpIwHcfROP2OFCoMEnE6lTy6jBw4O6UDepIn9kK1j95Ru7ZtPvwKcx7495JX5XM1gRRTfgk1nkCDW16hTqZTuZABtAc5rmN965LWkp4E49ORv1PbviB9g3UNep4CQeUrhXZ781/weIvAOtoWn16DKkRwAAAABJRU5ErkJggg=='
            },
            {
            name: 'Task Manager',
            command: "switchToTabHavingURI('about:processes', true)",
            tooltiptext: 'about:processes',
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMWSURBVDhPbZNPbNNWHMe/dprasR23zULGHDIEalnXVV3TFE4ITkiIG2LSxpU/F4TEASEEJ7QjTKBtB6QdBxoCtUg7QOGwCYSEAEFBFNYUUP8GktZJ7Th//Df23jMlbBJf6T372b/P9/l9/R6DTyiX3cclP9uUSaWSaUVJKXFZ+lyWpYQgcHGGgTUxcfu3setn52htB+127zohHTi494wkysMdHdEtHMelu3tkVhR5RKMsbNdEpVLCykoRmUwGenU4PnYdR9sG6XRqdNu20ePT+RnMLU5B01VUVpehEqBUKsCoarAsK2yHDh1BjFeSlKNiaVcolFTLtDH59C7u3BnHk8d/49XMUxTsN7BtMyz8IMOoguP4nrXhe4NafaWoaQZiQhye56HVasFv+XBHXQS+D3+tBUEAXdfJsjoTIU0UGjx6fE03jJopxmS4rhuasAoL8ZUERmLgd/nwFPJc8VD1NGrQ/YENO8+z/aZplUQxjqbcgLvOQRDx0cg3EBviEbABggVSuAhU31EDTiajML/QgKrZtIqC1AVP9WDN2tCmdDi2A40nAb612kvTdY1kEBMJ0km5tkGj0VyWxW44NZcEZ8NxHHJ1oJc1eO5aLiQHmoEgiDzDMALlws+gqhn1oiwnQpgWUoDOGjwks5Ddk83m8M3ACLr6eTKOsnEpJRq15Y8GpmkVeT4Gzw8QjUQwNJRF/1fDGPg6h97eQZTVejA7+6b0enr6/s9Xzt0m8BLl2gb1RrPYIjNe+Okyvlj/JVYrDTTNBhAwWFwo45dfz19UlMw9rlM0dd25TxCPchHaUW1QhmyybXfOzxWej4//ea9/IL15ONvHCYIEkbRs9tutvb2bvhsc7PshmYyPTNy6+jvl2gYv/rmr9vVtX0inld253MieZDLBOQ7579U62WgGeJ4luTit/MzUgyt/XPpxqZAPD1P7NO7Yflg6dfqYlujp6mAjLEhuJHEjqFRUdbWiPpucfP7XjZtjN94VX+ZJees99R8Dcsvs//7kvnWpno3lcqWWz88U5ucnX69qSwXy8v8Hoi3gX7e/eW+7FbGUAAAAAElFTkSuQmCC'
            },
            {
            name: 'Offline arbeiten',
            command: "BrowserOffline.toggleOfflineStatus();",
            subdir: 'Firefox Funktionen',
            image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMUSURBVDhPXZPbS1RRFMa/vfeZ8TSXLiJZY5ZNMmhRBPVUSkUXinzIN+mhC0UvPkRID/UHFET04lOC9BAE0UtUUElXREy7l6Y5k4GXJqecu47OmXNWa5+MogU/9t7r7PXttdbeR+QMBW3CNKFsG0KqIBYHt8uqqiZj9Zo6+9u3uBgd7XqdST8/Ol8cG3Z3/zV1Xkp3IpSCIqo11tVeNXbuOq8aGraJSCQsly3bJIPB5gBhTyKXy/WUSh/cgAX7LUAE6fXuLFu/4Z5qbNwq6us9KCsDsllgfp53KZimWblLykOzuZyv17IeL8RDnRMCkKreXBu+q2prV6a5FBmNQnV3w+nthYjFYKfTSDoOAsWi2CxEw1ihYAza9hMtIAtCBopLl14wTHNFkjP5ePAg3tfU4MeLF0ix0NTQEB6EQuhpbcVYVRUMzqhl0aIzQeCAm8K417t3IhTKWuEwTe3YQZOxGCVtm3ra2mhIKbrd3EyfxsfJIaLJ48cpaprUv2QJNRvGHVdgwO9vH66ooERlJWX8foru3k2JiQmaYZGBri76nkgQOQ5NnjjhCr71+aibOe3xjLkC3X7/o75AgIaDQYqxwCdu6ZvGBppOcUFsNhNtaaF+9r9kgR6vlx4wZwwjo+NlwS6lsqUS0sUiZhjuO74vr+T2Gvo7iElWVyPP4xw3MsdvJc/MEnH3WcC0Sk84XSfDIhnLwtemJqxrb0e5z4f4tWuYS0yh7tIlWGfPIunxIMcieW52ghxLC+CyEOFOpT7f4sOu19XRh9FRt+aBkyfpLvue7dtHP+NxKnAp948coQ72XZSSqgXe63j1FEgFAGONEPutfB6rIhHEOzsx0tHhpp/98gXJwUEEKiowzP7p6Wn0sb+PcIOHh24dXK08KsT1LUSHtUNXr9Fzmykycwy/SYwwN4H+GeAYT4fcP8nhtN6xmhIiVA5s1ifrAM0sU1gY3/GrvQ284uA2Xr5m3EP+NbUWaN0oxKlyoogH8OhOpZgYkOArvsfiV3g5qDdr+1/gj61ktjI1DOu4tzvAvGF0RQsG/AKOw3K+vE21tQAAAABJRU5ErkJggg=='
            },
            {
            name: 'separator',
            },
            {
            name: 'Neustart',
            tooltiptext: 'userChrome.js-Cache wird geleert',
    		command: 'Services.appinfo.invalidateCachesOnRestart(); \
                    Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);',
            id: 'AMreboot',
            image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tISBGb250IEF3ZXNvbWUgRnJlZSA2LjMuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4gLS0+PHBhdGggZD0iTTIyNCA5NmMzOC40IDAgNzMuNyAxMy41IDEwMS4zIDM2LjFsLTMyLjYgMzIuNmMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45SDQxNmM4LjggMCAxNi03LjIgMTYtMTZWNjRjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0zNCAzNEMzMzEuNCA1Mi42IDI4MC4xIDMyIDIyNCAzMmMtMTAuOSAwLTIxLjUgLjgtMzIgMi4zVjk5LjJjMTAuMy0yLjEgMjEtMy4yIDMyLTMuMnpNMTAwLjEgMTU0LjdsMzIuNiAzMi42YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOFY2NGMwLTguOC03LjItMTYtMTYtMTZIMzJjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGwzNCAzNEMyMC42IDE0OC42IDAgMTk5LjkgMCAyNTZjMCAxMC45IC44IDIxLjUgMi4zIDMySDY3LjJjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC0zOC40IDEzLjUtNzMuNyAzNi4xLTEwMS4zek00NDUuNyAyMjRIMzgwLjhjMi4xIDEwLjMgMy4yIDIxIDMuMiAzMmMwIDM4LjQtMTMuNSA3My43LTM2LjEgMTAxLjNsLTMyLjYtMzIuNmMtNC42LTQuNi0xMS41LTUuOS0xNy40LTMuNXMtOS45IDguMy05LjkgMTQuOFY0NDhjMCA4LjggNy4yIDE2IDE2IDE2SDQxNmM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtMzQtMzRDNDI3LjQgMzYzLjQgNDQ4IDMxMi4xIDQ0OCAyNTZjMC0xMC45LS44LTIxLjUtMi4zLTMyek0yMjQgNDE2Yy0zOC40IDAtNzMuNy0xMy41LTEwMS4zLTM2LjFsMzIuNi0zMi42YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRzLTguMy05LjktMTQuOC05LjlIMzJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMmMwIDYuNSAzLjkgMTIuMyA5LjkgMTQuOHMxMi45IDEuMSAxNy40LTMuNWwzNC0zNEMxMTYuNiA0NTkuNCAxNjcuOSA0ODAgMjI0IDQ4MGMxMC45IDAgMjEuNS0uOCAzMi0yLjNWNDEyLjhjLTEwLjMgMi4xLTIxIDMuMi0zMiAzLjJ6Ii8+PC9zdmc+"
            },
            {
            name: 'Beenden',
            command: "goQuitApplication(event);",
            id: 'AMquit',
            image: "data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9InJlZCI+CiAgPHBhdGggZD0iTTggNmExIDEgMCAwIDAgMS0xVjFhMSAxIDAgMCAwLTIgMHY0YTEgMSAwIDAgMCAxIDF6bTMuNS00LjAzMmExIDEgMCAwIDAtMSAxLjczMkE0Ljk0NiA0Ljk0NiAwIDAgMSAxMyA4IDUgNSAwIDAgMSAzIDhhNC45NDYgNC45NDYgMCAwIDEgMi41LTQuMyAxIDEgMCAwIDAtMS0xLjczMiA3IDcgMCAxIDAgNy4wMDYgMHoiLz4KPC9zdmc+Cg=="
            },
        ]
        },
    
        _externalAppPopup: null,
        _isready: false,
    
    
        /*
        init: function() {
            this.handleRelativePath(this.toolbar.apps);
            const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    
            var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
            ExternalAppBtn.id = "AppMenuButton";
            ExternalAppBtn.setAttribute("label", "AppButton");
            ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
            ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
            ExternalAppBtn.setAttribute("type", "menu");
            ExternalAppBtn.setAttribute("removable", "true");
    
    		  
    		  if (Appmenu.isButton) {
                  ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
                  ExternalAppBtn.style.width = "6%";
                  ExternalAppBtn.style.height = "1%";
                  ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
                } else {
    		      ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
                  ExternalAppBtn.style.width = "3%";
                  ExternalAppBtn.style.height = "1%";
                  ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
                  
                }
    
            if (Appmenu.isUrlbar === 1) {
                var navBar = document.getElementById("nav-bar-customization-target");
                navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
            } else if (Appmenu.isUrlbar === 2) {
                var menubar = document.getElementById("toolbar-menubar");
                menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
            } else {
                var TabsToolbar = document.getElementById("TabsToolbar");
                TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
            }
    
            var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
            ExternalAppPopup.setAttribute('id', 'AMpopup');
            this._externalAppPopup = ExternalAppPopup;
            ExternalAppBtn.appendChild(ExternalAppPopup);
            Appmenu.onpopupshowing();
            
    		// Menü mit Tastaturkürzel öffnen
    
            if (Appmenu.hotkey) {
                let key = document.createXULElement('key');
                key.id = 'key_AppMenuPopup';
                key.setAttribute('key', Appmenu.hotkey);
                    if (Appmenu.hotkeyModifier)
                key.setAttribute('modifiers', Appmenu.hotkeyModifier);
                key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
                document.getElementById('mainKeyset').appendChild(key);
            }
    
        },
        */
    
    
        init: function() {
         //   var isUrlbar = 1;  // 0: TabsToolbar; 1: navbar
         //   var isButton = 0;  // 0: Hamburger,klein; 1: Firefox,groß
            this.handleRelativePath(this.toolbar.apps);
            const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    
            var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
            ExternalAppBtn.id = "AppMenuButton";
            ExternalAppBtn.setAttribute("label", "AppButton");
            ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
            ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
            ExternalAppBtn.setAttribute("type", "menu");
            ExternalAppBtn.setAttribute("removable", "true");
            /*
            if (Appmenu.isButton) {
                ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAYAAAAwaEt4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF3SURBVFhH7ZUxS8RAEIX9M1fb29vb+wP8AdaCYCVY2FmInY1YWmlrp7WtNp6ihyKKCDYrb7kPxsuMJiG5CO6DR5LZmd2Zl9ndhduNUSqssggTsAgTsAgTsAgTsLEw71enyYPGHvZW8vvHzUUlrinvd5e/reX59Mk/K8zn5DrPBTyfPtlamOeTTXe8K4LHg1V3vG92KgwdI2ADT8fr+UmcfNVZ4OVspzIH0Joau9teSq/n+1Nryl1l8yA3/LUdgWLxq8NOthKJ/CQMUCE2YQuJEwkz3lqsbC+AOCoeaB5y1U8hn7qcmzB0hArkr79dHuVvhFLhs3GaU9+Tw7WpJWV/2SQIIA4bIpJbU85tK1Gg6IkLojgKtoV664kWbc+oQYRRpwh0DHZLQJztGM6LOh3T9oYcRBjrZ2F9ADYJGIFcZg9bxPFy/Y2DCCOqxe2tpHd7cwAbp3G6TVDh9mBlPp1h+va6rC4bC/NfWIQJWIQJWIQJWIRxOUpfQ+jqXwPuQ7IAAAAASUVORK5CYII=)";
            } else {
                ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA6SURBVDhPYxgcIDg+6z8IQ7lwPiEMVT4YDBh4gO4kZGfiw1Dlg8GAgQfoTkJ2Jj4MVT4YDCAfMDAAAFSm42US1bMnAAAAAElFTkSuQmCC)";
            }
            */
            if (Appmenu.isButton) {
                ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
                ExternalAppBtn.style.width = "6%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
              } else {
                ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
                ExternalAppBtn.style.width = "3%";
                ExternalAppBtn.style.height = "1%";
                ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
                
              }
            if (Appmenu.isUrlbar === 1) {
                var navBar = document.getElementById("nav-bar-customization-target");
                navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
            } else if (Appmenu.isUrlbar === 2) {
                var menubar = document.getElementById("toolbar-menubar");
                menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
            } else {
                var TabsToolbar = document.getElementById("TabsToolbar");
                TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
            }
            
    
    
    
    
    
    
    
    
        var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
        //ExternalAppPopup.setAttribute('onpopupshowing', 'event.stopPropagation(); Appmenu.onpopupshowing();');
        ExternalAppPopup.setAttribute('id', 'AMpopup');
        this._externalAppPopup = ExternalAppPopup;
        ExternalAppBtn.appendChild(ExternalAppPopup);
        Appmenu.onpopupshowing();
        
          // Menü mit Tastaturkürzel öffnen
        let key = document.createXULElement('key');
        key.id = 'key_AppMenuPopup';
     //   key.setAttribute('key', 'X');
        key.setAttribute('key', Appmenu.hotkey);
            if (Appmenu.hotkeyModifier)
     //   key.setAttribute('modifiers', 'alt');
        key.setAttribute('modifiers', Appmenu.hotkeyModifier);
        key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
        document.getElementById('mainKeyset').appendChild(key);
        },
    
    
    
            /* ****** NEU ****** */     
    
        onpopupshowing: function() {
            if (this._isready)
                return;
            if (this._externalAppPopup === null)
                return;
            var ExternalAppPopup = this._externalAppPopup;
    
            // Funktion zum Erstellen eines Menüs mit Untermenüs
            function createMenuItem(parentPopup, item) {
                var menuItem;
                if (item.name == 'separator') {
                    menuItem = document.createXULElement('menuseparator');
                    parentPopup.appendChild(menuItem);
                } else if (item.submenu && item.submenu.length > 0) {
                    menuItem = document.createXULElement('menu');
                    var subMenuPopup = document.createXULElement('menupopup');
                    menuItem.appendChild(subMenuPopup);
                    menuItem.setAttribute('class', 'menu-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    parentPopup.appendChild(menuItem);
                    for (let subItem of item.submenu) {
                        createMenuItem(subMenuPopup, subItem);
                    }
                } else {
                    menuItem = document.createXULElement('menuitem');
                    menuItem.setAttribute('class', 'menuitem-iconic');
                    menuItem.setAttribute('label', item.name);
                    menuItem.setAttribute('image', item.image);
                    if (item.command) {
                        menuItem.setAttribute('oncommand', item.command);
                    } else if (item.path) {
                        menuItem.setAttribute('oncommand', "Appmenu.exec(this.path, this.args);");
                        menuItem.path = item.path;
                        menuItem.args = item.args;
                    }
                    menuItem.setAttribute('tooltiptext', item.tooltiptext || item.name);
                    menuItem.setAttribute('id', item.id || "");
                    parentPopup.appendChild(menuItem);
                }
            }
    
            // Verarbeitung der Subdirs
            for (let subdir of this.toolbar.subdirs) {
                if (subdir.name == 'separator') {
                    ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
                } else {
                    var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
                    var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
                    subdirItem.setAttribute('class', 'menu-iconic');
                    subdirItem.setAttribute('label', subdir.name);
                    subdirItem.setAttribute('image', subdir.image);
                    Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
                    Appmenu.subdirMenuHash[subdir.name] = subdirItem;
                }
            }
    
            // Verarbeitung der Apps
            for (let app of this.toolbar.apps) {
                if (app.subdir && Appmenu.subdirPopupHash[app.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[app.subdir], app);
                } else {
                    createMenuItem(ExternalAppPopup, app);
                }
            }
    
            // Verarbeitung der Configs
            for (let config of this.toolbar.configs) {
                if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
                    createMenuItem(Appmenu.subdirPopupHash[config.subdir], config);
                } else {
                    createMenuItem(ExternalAppPopup, config);
                }
            }
    
            if (this.autohideEmptySubDirs) {
                for (let key in Appmenu.subdirPopupHash) {
                    if (Appmenu.subdirPopupHash[key].hasChildNodes()) {
                        continue;
                    } else {
                        Appmenu.subdirMenuHash[key].setAttribute("hidden", "true");
                    }
                }
            }
    
            if (this.moveSubDirstoBottom) {
                let i = ExternalAppPopup.childNodes.length;
                while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
                    ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
                }
            }
    
            this._isready = true;
        },
    
    
        handleRelativePath: function(apps) {
            for (let app of apps) {
                if (app.path) {
                    app.path = app.path.replace(/\//g, '\\');
                    var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
                    if (/^(\\)/.test(app.path)) {
                        app.path = ffdir + app.path;
                    }
                }
            }
        },
    
        exec: function(path, args) {
            args = args || [];
            var args_t = args.slice(0);
            for (let arg of args_t) {
                arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
            }
            var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            file.initWithPath(path);
            if (!file.exists()) {
                alert('Datei nicht gefunden: ' + path);
                return;
            }
            if (file.isExecutable() && !path.endsWith('.js')) {
                var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                process.init(file);
                process.run(false, args_t, args_t.length);
            } else if (file.isFile()) {
                if (this.editor) {
                    let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
                    UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
                    let path = UI.ConvertFromUnicode(file.path);
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.editor);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, [path], 1);
                } else {
                    file.launch();
                }
            } else if (file.isDirectory()) {
                if (this.fileManager) {
                    let args=[this.FMParameter,path];
                    let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                    app.initWithPath(this.fileManager);
                    let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                    process.init(app);
                    process.run(false, args, args.length);
                } else {
                    file.launch();
                }
            }
        },
    };
    
    
    
    
    
    
        (function() {
            //    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
            
                let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
            
            //    var css =`
            
            let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);       
            let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    
                #main-menubar > menu { display: none !important; }
    
            `), null, null);
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
        })();
    
    if (window.gBrowser)
    Appmenu.init();
    Alles anzeigen

    Und hier das zweite, um die Menüs der Menüleiste zu spiegeln (klonen):

    Code
    //    Menüleiste spiegeln
    
    (function () {
        setTimeout(async function () {
            // Menüs einfügen 
            var item2 = document.getElementById('AMreboot')
            var mb = document.getElementById('main-menubar');
            // clone menues
            [...mb.children].forEach(m => {
                if (m.tagName.toLowerCase() === "menu") {
                    let cl = m.cloneNode(true);
                    let t = cl.querySelector('.menubar-text');
                    if (t) cl.removeChild(t);
                    cl = item2.parentNode.insertBefore(cl, item2);
                }
            });
            // bind event
            let source = await readSource('chrome://browser/content/browser-menubar.js');
            source = source.replace(/.*let mainMenuBar/is, 'let mainMenuBar').replace(/},\n\s+{ once: true }.*/is, '').replace("main-menubar", "AMpopup").replace('.getElementById("historyMenuPopup")', '.querySelector("#AMpopup #historyMenuPopup")').replaceAll('getElementById("history-menu")', 'querySelector("#AMpopup #history-menu")').replace('.getElementById("menu_EditPopup")', '.querySelector("#AMpopup #menu_EditPopup")')
            eval(source);
            async function readSource (url) {
                return new Promise(resolve => {
                    let xhr = new XMLHttpRequest();
                    xhr.open('GET', url);
                    xhr.onload = function () {
                        resolve(xhr.responseText);
                    };
                    xhr.send();
                });
            }
        }, 300);
    })();
    Alles anzeigen
  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 20. September 2024 um 15:10

    Jizz war sehr beschäftigt, aber er hat gerade geantwortet
    und mir ein neues passendes Skript geschickt!

    :*:love::*:love:

    Es funktioniert!

    Werde also doch weiter machen!

  • Startseite von Firefox

    • Mira_Belle
    • 20. September 2024 um 14:47

    Er fragte nach einem Video! Warum erstellst Du ihm keins?

  • Welchen Selektor bei Screenshot für das untere helle Feld, einschließlich der Button

    • Mira_Belle
    • 19. September 2024 um 22:30

    2002Andreas
    Danke für den Code.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 17. September 2024 um 21:01
    Zitat von Endor

    jizz hat da auch ein eigenes Script usw.
    Vielleicht schaust Du Dir das mal an:

    https://github.com/benzBrake/Fire…eJS/addMenuPlus

    Mfg.
    Endor

    Danke Dir, das hatte ich auch schon gesehen und versucht zu verstehen.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • Mira_Belle
    • 17. September 2024 um 16:34

    So!

    Ich schmeiße das Handtuch.

    Meine JavaScript-Kenntnisse sind leider doch sehr eingeschränkt und im Sourcecode des Firefox komme ich auch nicht so zurecht.
    Jizz hat sich nicht mehr gemeldet und ich denke, dass ich dieses Projekt nicht mehr abschließen werde.

    Die Idee, bzw. meine Idee, war ja, die kompletten Menüs der Menüleiste in ein per Button zu öffnen, neues Menü zu verschieben,
    oder zu kopieren. Wie auch immer, das klappt halt nicht so, wie ich es mir vorgestellt habe.

    OK, nun ist hier an dieser Stelle das Projekt gestorben.
    Schade.

  • Wie kann man geschützte Bilder herunterladen?

    • Mira_Belle
    • 13. September 2024 um 16:32
    Zitat von 2002Andreas

    Geht doch viel einfacher, und wurde auch schon mehrmals genannt.:/

    Ach ja, die vierte Möglichkeit sogar ohne irgendwas am Firefox machen zu müssen.

Unterstütze uns!

Jährlich (2025)

104,5 %

104,5% (679,10 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon