Beiträge von Mira_Belle
-
-
-
-
.DeJaVu Es ist mir egal, wo was gestrandet ist! Das CSS ist Murks und ich werde es nicht bereinigen und auf den aktuellen Stand bringen. Zumal ich ja auch gar nicht weis, was Tec1do von den Veränderungen eigentlich haben will.
Wie schaut Dein Firefox aus? Screenshot, wäre ganz gut.2002Andreas Ich bin mir absolut sicher, dass da so einige Leichen im Keller sind.
Aber, ohne dass wir wissen, wie er sich seinen Firefox vorstellt, tappen wir nur im Dunklen. -
2002Andreas & Tec1do Es sind aber einige Fehler im CSS!
CSS
Alles anzeigen/* Windows 7 specific */ Media (-moz-os-version: windows-win7) { .tabbrowser-tab { background-color: transparent !important; border: none !important; } Media (-moz-windows-default-theme) { .tabbrowser-tab:not(:-moz-lwtheme) { background-color: transparent !important; border: none !important; } }&
CSS/* OS-specific color variables */ Media screen and (-moz-windows-theme) { :root { } } Media not screen and (-moz-windows-theme) { :root { } }Ist der Wurm drinnen! Da mault VS-Code!
Und so schaut's schon besser aus.CSS
Alles anzeigen/* Windows 7 specific */ @Media (-moz-os-version: windows-win7) { .tabbrowser-tab { background-color: transparent !important; border: none !important; } } @Media (-moz-windows-default-theme) { .tabbrowser-tab:not(:-moz-lwtheme) { background-color: transparent !important; border: none !important; } }&
CSS
Alles anzeigen/* OS-specific color variables */ @media screen and (-moz-windows-theme) { :root { /* Hier deine Variablen für Windows-Themes einfügen */ } } @media not screen and (-moz-windows-theme) { :root { /* Hier deine Variablen für Nicht-Windows-Themes einfügen */ } }Wichtig!
Keine leeren Regelsätze verwenden.Entweder das wird komplett gelöscht, weil es ja eigentlich gar nicht gebraucht wird,
oder eben "etwas" eintragen.
Gilt im übrigen auch für " /* Windows 7 specific */ "!
Auch dieser Code kann eigentlich gelöscht werden!
Tec1do Du nutzt doch W10 oder W11, oder? -
Das CSS von 2002Andreas aus Beitrag #6 funktioniert einwandfrei!
Bitte nach dem Entpacken umbenennen. -
Neues Skript!
Windows Explorer ist ohne Parameter
Der Chrome- und CSS-Ordner werden im Explorer geöffnet.Windows Explorer ist mit Parameter let fileManagerParam = "/select,";
Und auch hier, der Chrome- und CSS-Ordner werden im Explorer geöffnet.
Es spielt also keine Rolle, ob ich einen Parameter angebe oder nicht.
Was die Einschränkungen sein sollen, mir ist nichts aufgefallen.
Der Explorer verhält sich gleich. -
2002Andreas Tatsache.
Und ich habe da was verwechselt. Aber, schon ist's korrigiert. Danke. -
JavaScript
Alles anzeigen// 12a_aboutname-button.uc.js // Button für About-Dialog (function() { try { // ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs"); CustomizableUI.createWidget({ id: "aboutname", defaultArea: CustomizableUI.AREA_NAVBAR, removable: true, label: "aboutname", tooltiptext: "Über Firefox", onClick: function() { openAboutDialog(); }, onCreated: function(aNode) { // "currentProfileDirectory"-Lösung: var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); var aboutname_icon = 'url("file:///' + currentProfileDirectory + '/chrome/icons/firefox_21865_16.jpg")'; aNode.style.listStyleImage = aboutname_icon; return aNode; } }); } catch (e) { Components.utils.reportError(e); }; })();Oh.

1. Sören war schneller.
2. Anderer Ansatz.Funktioniert es?
-
Eine etwas aufgeräumtere Version für den FF 143.
JavaScript
Alles anzeigen// Scrollbar.uc.js "use strict"; /* Custom Scrollbars for Firefox ********************************************************************************************* */ /* */ /* Version: v2.0.8.uc.js for Firefox 143+ */ /* */ /* Scrollbar.v2.0.8.js https://www.camp-firefox.de/forum/thema/139766/?postID=1279113#post1279113 */ /* */ /* ****************************************************************************************************************************** README about:config > widget.windows.overlay-scrollbars.enabled > false (Windows) widget.gtk.overlay-scrollbars.enabled > false (Linux) [!] The above preferences have to be set to 'false' for this code to work [!] Die genannten Einstellungen müssen auf 'false' gesetzt werden, damit dieser Code funktioniert. /* ----------------------------------------------------------------------------------- */ /* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */ /* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */ /* */ /* Auch müssen die Dateinamen im Skript mit jenen im Ordner "icons" übereinstimmen */ /* ----------------------------------------------------------------------------------- */ /* *************************************************************************************************************************** */ (function() { /* **** Konfiguration **** */ // PROFILE PHATH "CALCULATE" let ProfileDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // CUSTOM SCROLLBAR COLORS/GRADIENTS // - scrollbar let cs_scrollbar_arrows_color = "#bfbfbf" ;// "#7c7c7c" "#1e90ff" let cs_scrollbar_arrows_hover_color = "#ffa600" ;// "#ffa600" "#bebebe" // - background let cs_background_color = "#5b5b66" ;// default: cs_background_color = "#DDDDDD" / "#AEC5FA" let cs_background_roundness = 0 ;// default: cs_background_roundness = 0 / in px / 9 let cs_ignore_color_gradients = true ;// default: cs_ignore_color_gradients = false / true 'flat' scrollbars // - corner let cs_corner_background_color = "#bfbfbf" ;// default: cs_corner_background_color = "#DDDDDD" / - corner / "#CCCCCC" // - thumb/slider let cs_thumb_color = "#bfbfbf" ;// default: cs_thumb_color = "#33CCFF" / thumb/slider let cs_thumb_hover_color = "#ffa600" ;// default: cs_thumb_hover_color = "#66FFFF" let cs_thumb_border_color = "#5b5b66" ;// default: cs_thumb_border_color = "#33CCFF" let cs_thumb_border = 1 ;// default: cs_thumb_border = 0 / in px 1 let cs_thumb_roundness = 9 ;// default: cs_thumb_roundness = 0 / in px 9 let cs_thumb_minimal_size = 17 ;// default: cs_thumb_minimal_size = 17 / in px // - buttons let cs_buttons_color = "#5b5b66" ;// default: cs_buttons_color = "#66FFFF" "Bahama Blue";/ buttons let cs_buttons_hover_color = "#5b5b66" ;// default: cs_buttons_hover_color = "#33CCFF" / "#bfffff" let cs_button_size = 17 ;// in px // default: cs_button_size = 17 / in px let cs_buttons_border = 2 ;// default: cs_buttons_border = 0 / in px let cs_buttons_roundness = 0 ;// default: cs_buttons_roundness = 0 / in px /* **** Ende Konfiguration **** */ /* *************************************************************************************************************************** */ // FIXED SCROLL BAR COLORS/COLOR GRADIENTS // - fixed values for background image gradients let GRADIENT_VERTICAL = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; let GRADIENT_HORINZONTAL = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // - background let cs_background_image_vertical = GRADIENT_VERTICAL ;// default: cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_background_image_horizontal = GRADIENT_HORINZONTAL ;// default: cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" // - corner let cs_corner_background_image = "linear-gradient(45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%),linear-gradient(-45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%)" ;// default: cs_corner_background_image = "linear-gradient(45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%),linear-gradient(-45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%)" // - thumb/slider let cs_thumb_image_vertical = GRADIENT_VERTICAL ;// default: cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_image_horizontal = GRADIENT_HORINZONTAL ;// default: cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_hover_image_vertical = GRADIENT_VERTICAL ;// default: cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_hover_image_horizontal = GRADIENT_HORINZONTAL ;// default: cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" // - buttons let cs_buttons_image_vertical = GRADIENT_VERTICAL ;// default: cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_image_horizontal = GRADIENT_HORINZONTAL ;// default: cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_hover_image_vertical = GRADIENT_VERTICAL ;// default: cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_hover_image_horizontal = GRADIENT_HORINZONTAL ;// default: cs_buttons_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" // unset background image color gradients -> flat scrollbars if(cs_ignore_color_gradients === true) cs_background_image_vertical = cs_background_image_horizontal = cs_corner_background_image = cs_thumb_image_vertical = cs_thumb_image_horizontal = cs_thumb_hover_image_vertical = cs_thumb_hover_image_horizontal = cs_buttons_image_vertical = cs_buttons_image_horizontal = cs_buttons_hover_image_vertical = cs_buttons_hover_image_horizontal = "unset"; let custom_scrollbars_code=''; let custom_scrollbar_arrows_code=''; custom_scrollbars_code=` scrollcorner, scrollbar > slider, scrollbar > slider > thumb, scrollbar > scrollbarbutton { /* appearance: auto; */ -moz-default-appearance: none !important; } scrollbar > slider { background-color: ${cs_background_color} !important; background-image: ${cs_background_image_horizontal} !important; border-radius: ${cs_background_roundness}px !important; } scrollbar[vertical] > slider { background-image: ${cs_background_image_vertical} !important; border-radius: ${cs_background_roundness}px !important; } scrollcorner { background-color: ${cs_corner_background_color} !important; background-image: ${cs_corner_background_image} !important; } scrollbar > slider > thumb { background-color: ${cs_thumb_color} !important; border-radius: ${cs_thumb_roundness}px !important; box-shadow: inset 0 0 0 ${cs_thumb_border}px ${cs_thumb_border_color} !important; } scrollbar[vertical] > slider > thumb { background-image: ${cs_thumb_image_vertical} !important; min-height: ${cs_thumb_minimal_size}px !important; } scrollbar > slider > thumb { background-image: ${cs_thumb_image_horizontal} !important; min-width: ${cs_thumb_minimal_size}px !important; } scrollbar > slider > thumb:hover, scrollbar > slider > thumb:active { background-color: ${cs_thumb_hover_color} !important; } scrollbar > slider > thumb[vertical]:hover, scrollbar > slider > thumb[vertical]:active { background-image: ${cs_thumb_hover_image_vertical} !important; } scrollbar > slider > thumb[horizontal]:hover, scrollbar > slider > thumb[horizontal]:active { background-image: ${cs_thumb_hover_image_horizontal} !important; } scrollbar > scrollbarbutton { background-color: ${cs_buttons_color} !important; border-radius: ${cs_buttons_roundness}px !important; box-shadow: inset 0 0 0 ${cs_buttons_border}px !important; height: 17px !important; width: 17px !important; } scrollbar[vertical] scrollbarbutton { background-image: ${cs_buttons_image_vertical} !important; } scrollbar[horizontal] scrollbarbutton { background-image: ${cs_buttons_image_horizontal} !important; } scrollbar > scrollbarbutton:hover { background-color: ${cs_buttons_hover_color} !important; } scrollbar[vertical] scrollbarbutton:hover { background-image: ${cs_buttons_hover_image_vertical} !important; } scrollbar[horizontal] scrollbarbutton:hover { background-image: ${cs_buttons_hover_image_horizontal} !important; } `; custom_scrollbar_arrows_code=` scrollbar > scrollbarbutton { background-repeat: no-repeat !important; background-position: center center !important; } scrollbar[vertical] > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-hoch.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_color} !important; fill-opacity: 1 !important; } scrollbar[vertical] > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-runter.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_color} !important; fill-opacity: 1 !important; } scrollbar > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-links.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_color} !important; fill-opacity: 1 !important; } scrollbar > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-rechts.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_color} !important; fill-opacity: 1 !important; } /* Hover */ scrollbar[vertical] > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-hoch.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_hover_color} !important; fill-opacity: 1 !important; } scrollbar[vertical] > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-runter.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_hover_color} !important; fill-opacity: 1 !important; } scrollbar > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-links.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_hover_color} !important; fill-opacity: 1 !important; } scrollbar > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-rechts.svg") !important; -moz-context-properties: fill, fill-opacity; fill: ${cs_scrollbar_arrows_hover_color} !important; fill-opacity: 1 !important; } scrollbar > scrollbarbutton { min-width: ${cs_button_size}px !important; min-height: ${cs_button_size}px !important; } `; Components.classes["@mozilla.org/content/style-sheet-service;1"] .getService(Components.interfaces.nsIStyleSheetService) .loadAndRegisterSheet(Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(` ${custom_scrollbars_code} ${custom_scrollbar_arrows_code} `), null, null), Components.classes["@mozilla.org/content/style-sheet-service;1"] .getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET); })(); -
Windows Explorer ist ohne Parameter
Der Chrome- und CSS-Ordner werden geöffnet.Windows Explorer ist mit Parameter
Der Chrome- und CSS-Ordner werden geöffnet.
-
@Atze64 .DeJaVu ist eben so, kannst Du aber nicht wissen.
Aber Du musst nicht gleich Dein Konto löschen, nur weil in einem so speziellem Thema Dir hat keiner hat helfen können.
Dies ist primär ja auch ein Forum für Firefox! Muss man halt auch sehen.
Und wenn Du mal Fragen zum Browser hast, dann findest Du nirgends bessere Hilfe! (Finde ich!) -
@Atze64 Kleiner Tipp am Rande!
Leg Dich bei diesem Thema nicht mit .DeJaVu an!
Erstens besteht er keinen Spaß, ok ist ein Joke, aber er wird ganz bestimmt sauer, wenn er sich verschaukelt vorkommt.Was uBlock angeht, macht Ihm keiner so schnell was vor! Er hilft, auf seine weise, manches Mal auch etwas ruppig,
komm Ihm aber nicht blöd, sonst wird es ungemütlich. -
-
Versuche es einfach mal nur mit:
CSS
Alles anzeigen/* UserStyles Loader Button */ #usercssloader-menu-item { background-image: url("../icons/CSS.webp"); background-position: center; background-repeat: no-repeat; background-size: 15px; margin-top: 1px !important; } #usercssloader-menu-item:hover { background-color: var(--toolbarbutton-hover-background); } #usercssloader-menu-item #usercssloader-menu > .menu-text[value="CSS"] { opacity: 0; } -
Speravir So, eine große Herausforderung wird sein, aus zwei nur ein Skript zu machen.
Denn ich finde es echt doof, dass im Hintergrund das userCSSLoader-Skript laufen muss,
weil auf Funktionen (Code) in diesem zugegriffen wird!Da habe ich also noch was vor.
-
Boersenfeger Speravir fragte Dich nach Deiner CSS, nicht nach Deinem JavaScript!
Hast Du die Änderungen aus #63 in Deinem CSS (#28) vorgenommen?
-
-
Speravir Ich denke, ich hab's. Na ja fast!
Erste Voraussetzung, das userCSSLoader-Skript muss vorhanden sein und vor dem Appmenü-Skript geladen werden.
Und dann das "neue" Appmenü-Skript:JavaScript
Alles anzeigen// ==UserScript== // @name Appmenu.uc.js // @namespace Appmenu@gmail.com // @description Basiert auf dem Script externalFuncButtonM.uc.js, Wiederherstellung der Orangenen FF-Menü Schaltfläche // @include main // @version update for Firefox 68+ by aborix // @author defpt // @charset UTF-8 // @version 2020.07.13 Weitere Menüs und Funktionen ergänzt by bege // @version 2024.08.10 alle Einstellungen im Abschnitt Konfiguration vornehmen // @version 2024.08.18 einige Veränderungen am Skript, Symbole, Funktionen & Menüs by Mira Bellenbaum // @version 2025.01.15 EventListener korrigiert und angepasst, by Mira Bellenbaum // @version 2025.04.03 Zeile 340 "eval()" ersetzt. Nachfolgend Zeilen 381-416 ergänzt und Parameter (command:) angepasst // @version 2025.07.21 Zeile 239 geändert! Button weiter nach rechts! // ==/UserScript== // Definiere den Profilpfad let ProfilePath = PathUtils.toFileURI( PathUtils.join(PathUtils.profileDir, 'chrome', 'icons') ); var Appmenu = { // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 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: 2, // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar isButton: 0, // 0: Hamburger,klein; 1: Firefox,groß, // Hotkey zum Öffnen des Appmenüs oder leer ('') hotkey: "f", hotkeyModifier: "alt", // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 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: `${ProfilePath}/folder_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne `url()` }, { name: 'Firefox Funktionen', image: `${ProfilePath}/settings_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne 'url()' }, { name: 'separator', }, ], */ subdirs: [ { name: 'Firefox Verzeichnisse', image: `${ProfilePath}/folder_currentColor.svg`, }, { name: 'Firefox Funktionen', image: `${ProfilePath}/settings_currentColor.svg`, }, { name: 'separator', }, { name: 'CSS-Loader', image: `${ProfilePath}/default-browser-red.svg`, }, { name: 'Style-Loader-Menü', image: `${ProfilePath}/default-browser-red.svg`, }, { name: 'separator', }, ], apps: [ // Untermenü Firefox Verzeichnisse { name: 'Profil-Verzeichnis', 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-Verzeichnis', id: 'AMAddons', root: 'ProfD', path: '\\extensions', subdir: 'Firefox Verzeichnisse', }, { name: 'Programm-Verzeichnis', 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: 'goKonsole', subdir: 'Firefox Funktionen', }, { name: 'Browser-Werkzeuge', id: 'AMWerkzeuge', command: 'goWerkzeuge', subdir: 'Firefox Funktionen', }, { name: 'Web-Entwickler', id: 'AMEntwickler', command: 'goEntwickler', subdir: 'Firefox Funktionen', }, { name: 'Firefox synchronisieren', id: 'AMsynchron', command: 'gSync', subdir: 'Firefox Funktione', }, { 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: 'goReeboot', }, { 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.addEventListener('click', event => { 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 = 'Button_groß.png'; let AlternateIcon = 'Button_klein-5.png'; // Wenn Appmenu.isButton true ist, benutze das große Symbol, sonst das kleine if (Appmenu.isButton) { ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${DefaultIcon}')`; // Großes Symbol ExternalAppBtn.style.width = '94px'; // Feste Breite für großes Symbol ExternalAppBtn.style.height = '24px'; // Feste Höhe für großes Symbol } else { ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${AlternateIcon}')`; // Kleines Symbol //ExternalAppBtn.style.width = "16px"; // Feste Breite für kleines Symbol //ExternalAppBtn.style.width = '26px'; ExternalAppBtn.style.width = '50px'; ExternalAppBtn.style.height = '21px'; // Feste Höhe für kleines Symbol } // Button in die richtige Toolbar einfügen 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.addEventListener('click', event => { event.stopPropagation(); }); 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.addEventListener('command', function () { document.getElementById('AMpopup').openPopup(); }); document.getElementById('mainKeyset').appendChild(key); } }, buildCSSLoaderMenu: function(parentPopup) { // Erst alle alten Einträge löschen while (parentPopup.firstChild) { parentPopup.removeChild(parentPopup.firstChild); } // Nur wenn UCL existiert und initialisiert ist if (typeof UCL === 'undefined' || !UCL.readCSS) return; // Alle CSS-Dateien aus UCL.readCSS auflisten for (let leafName of Object.keys(UCL.readCSS)) { let CSS = UCL.readCSS[leafName]; let menuitem = document.createXULElement("menuitem"); menuitem.setAttribute("label", leafName); menuitem.setAttribute("type", "checkbox"); menuitem.setAttribute("checked", CSS.enabled); menuitem.addEventListener("command", () => UCL.toggle(leafName)); menuitem.addEventListener("click", (event) => { if (event.button === 1) { UCL.toggle(leafName); event.preventDefault(); } }); menuitem.addEventListener("mouseup", (event) => { if (event.button === 2) { closeMenus(event.target); UCL.edit(UCL.getFileFromLeafName(leafName)); event.preventDefault(); } }); parentPopup.appendChild(menuitem); } }, buildStyleLoaderMenu: function(parentPopup) { // Erst alle alten Einträge löschen while (parentPopup.firstChild) { parentPopup.removeChild(parentPopup.firstChild); } // Styles importieren let rebuildItem = document.createXULElement("menuitem"); rebuildItem.setAttribute("label", "Styles importieren"); rebuildItem.addEventListener("command", () => UCL.rebuild()); parentPopup.appendChild(rebuildItem); // CSS-Datei erstellen let createCSS = document.createXULElement("menuitem"); createCSS.setAttribute("label", "CSS-Datei erstellen"); createCSS.addEventListener("command", () => UCL.create()); parentPopup.appendChild(createCSS); // CSS-Ordner öffnen let openFolder = document.createXULElement("menuitem"); openFolder.setAttribute("label", "CSS-Ordner öffnen"); openFolder.addEventListener("command", () => UCL.openFolder()); parentPopup.appendChild(openFolder); // Chrome-Ordner öffnen if (UCL.showChrome === 1) { let openChromeFolder = document.createXULElement("menuitem"); openChromeFolder.setAttribute("label", "Chrome-Ordner öffnen"); openChromeFolder.addEventListener("command", () => UCL.openCHRMFolder()); parentPopup.appendChild(openChromeFolder); } // userChrome.css bearbeiten let editChromeItem = document.createXULElement("menuitem"); editChromeItem.setAttribute("label", "userChrome.css bearbeiten"); editChromeItem.addEventListener("command", () => UCL.editUserCSS("userChrome.css")); parentPopup.appendChild(editChromeItem); // userContent.css bearbeiten let editContentItem = document.createXULElement("menuitem"); editContentItem.setAttribute("label", "userContent.css bearbeiten"); editContentItem.addEventListener("command", () => UCL.editUserCSS("userContent.css")); parentPopup.appendChild(editContentItem); }, onpopupshowing: function() { if (this._externalAppPopup === null) return; var ExternalAppPopup = this._externalAppPopup; // Erst alle alten Einträge löschen while (ExternalAppPopup.firstChild) { ExternalAppPopup.removeChild(ExternalAppPopup.firstChild); } // Subdirs neu aufbauen 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; } } // Hier die neuen Menüpunkte einfügen if (typeof UCL !== 'undefined') { this.buildCSSLoaderMenu(Appmenu.subdirPopupHash['CSS-Loader']); this.buildStyleLoaderMenu(Appmenu.subdirPopupHash['Style-Loader-Menü']); } // Apps und Configs neu aufbauen this.handleRelativePath(this.toolbar.apps); for (let app of this.toolbar.apps) { var appItem; if (app.name == 'separator') { appItem = document.createXULElement('menuseparator'); } else { appItem = document.createXULElement('menuitem'); appItem.setAttribute('class', 'menuitem-iconic'); appItem.setAttribute('label', app.name); appItem.setAttribute('image', app.image); appItem.addEventListener('command', function () { Appmenu.exec(this.path, this.args); }); appItem.setAttribute('tooltiptext', app.name); appItem.path = app.path; appItem.args = app.args; } if (app.subdir && Appmenu.subdirPopupHash[app.subdir]) Appmenu.subdirPopupHash[app.subdir].appendChild(appItem); else ExternalAppPopup.appendChild(appItem); } for (let config of this.toolbar.configs) { var configItem; if (config.name == 'separator') { configItem = document.createXULElement('menuseparator'); } else { configItem = document.createXULElement('menuitem'); configItem.setAttribute('class', 'menuitem-iconic'); configItem.setAttribute('label', config.name); configItem.setAttribute('image', config.image); configItem.addEventListener('command', () => { Appmenu.executeCommand(config.command); }); if (config.tooltiptext) { configItem.setAttribute('tooltiptext', config.tooltiptext); } else { configItem.setAttribute('tooltiptext', config.name); } configItem.setAttribute('id', config.id); } if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) { Appmenu.subdirPopupHash[config.subdir].appendChild(configItem); } else { ExternalAppPopup.appendChild(configItem); } } if (this.autohideEmptySubDirs) { for (let subdirName in Appmenu.subdirPopupHash) { if (!Appmenu.subdirPopupHash[subdirName].hasChildNodes()) { Appmenu.subdirMenuHash[subdirName].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; }, executeCommand: function(command) { const commandMap = { 'gCustomizeMode.enter()': () => gCustomizeMode.enter(), 'safeModeRestart();': () => safeModeRestart(), 'goKonsole': () => { var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager'); BrowserConsoleManager.openBrowserConsoleOrFocus(); }, 'goWerkzeuge': () => { 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(); }, 'goEntwickler': () => { 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()); }, 'gSync': () => gSync.openPrefs('menubar'), 'LoginHelper.openPasswordManager(window, { entryPoint: "mainmenu" })': () => LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' }), 'switchToTabHavingURI("about:processes", true)': () => switchToTabHavingURI('about:processes', true), 'BrowserOffline.toggleOfflineStatus();': () => BrowserOffline.toggleOfflineStatus(), 'goReeboot': () => { Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); }, 'goQuitApplication(event);': () => goQuitApplication(event), }; if (commandMap[command]) { commandMap[command](); } else { console.warn('Unbekannter Befehl: ', command); } }, 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 = 'css4.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(` #AMpopup { margin-left: 8px !important; } menuitem[label='Profil-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon01}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='Chrome-Ordner'] { background-image: url('${ProfilePath}/${Icon02}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='CSS-Ordner'] { background-image: url('${ProfilePath}/${Icon03}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='JS-Ordner'] { background-image: url('${ProfilePath}/${Icon04}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='Addon-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon05}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16pxx !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='Programm-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon06}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } menuitem[label='Startup-Cache'] { background-image: url('${ProfilePath}/${Icon07}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; /* Größe des Symbols anpassen */ -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMAnpassen { background-image: url('${ProfilePath}/${Icon11}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMModus { background-image: url('${ProfilePath}/${Icon12}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMKonsole { background-image: url('${ProfilePath}/${Icon13}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMWerkzeuge { background-image: url('${ProfilePath}/${Icon14}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMEntwickler { background-image: url('${ProfilePath}/${Icon15}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMsynchron { background-image: url('${ProfilePath}/${Icon16}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMdaten { background-image: url('${ProfilePath}/${Icon17}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMManager { background-image: url('${ProfilePath}/${Icon18}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } #AMOffline { background-image: url('${ProfilePath}/${Icon19}'); background-repeat: no-repeat !important; background-position: 11px 3px !important; background-size: 16px 16px !important; -moz-context-properties: fill, fill-opacity; fill: currentColor; } /* Neustart-Button */ #AMreboot { background-image: url('${ProfilePath}/${ButtonIcon01}'); background-repeat: no-repeat !important; background-position: 10px 2px !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: #fbc96e !important; } /* Beenden-Button */ #AMquit { background-image: url('${ProfilePath}/${ButtonIcon02}'); background-repeat: no-repeat !important; background-position: 12px 3px !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; } `), null, null ); // CSS-Regeln registrieren sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET); })(); if (window.gBrowser) Appmenu.init(); -
Sören Hentzschel Danke für die ausführliche Erklärung.
Richtig, wie in dem Beispiel, nur so kenne ich das. Mit dem Backslash hatte ich tatsächlich zuvor noch nie gesehen.
Wie schreibt Andreas so gerne, man lernt nie aus.