Beiträge von Mira_Belle
-
-
Ah, ok.
Und mit Aris original Skript funktioniert es?
Bzw. mit diesem => RE: Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig -
Danke für das Feedback.
.... , mit Ausnahme des Farbverlaufs.
Das meinte ich mit 3-D-Effekt.
Außerdem funktionieren beide Skripte ....
Welche beiden Skripte?... nicht mehr in den Ordnern der Lesezeichenleiste ...
Dazu kann ich absolut nichts "sagen"! Ich hatte bisher nicht das Problem, bzw. so viele Lesezeichen, dass da irgendwo
eine Scrollbar auftauchte.Bräuchte mal ein Bild dazu, Version 142 und 143+
-
Verlinke bitte mal zum Thread, wo Du das Skript gepostet hast.
-
Stelle hier mal meine Version des Appmenu.uc.js vor.
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', }, ], 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); } }, onpopupshowing: function() { if (this._isready) return; if (this._externalAppPopup === null) return; var ExternalAppPopup = this._externalAppPopup; // 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) { 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); } // Verarbeitung der Configs for (let config of this.toolbar.configs) { var configItem; if (config.name == 'separator') { configItem = document.createXULElement('menuseparator'); } else { configItem = ExternalAppPopup.appendChild(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 i = 0; i < Appmenu.subdirPopupHash.length; i++) { if (Appmenu.subdirPopupHash[i].hasChildNodes()) { continue; } else { Appmenu.subdirMenuHash[i].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();

-
So, grundsätzlich funktioniert meine Version des Skriptes nun auch ab FF 143

Was, so glaube ich, noch nicht richtig funktioniert, ist der 3-D-Effekt!linear-gradient( .... )
Da bin ich noch dran.Auch werde ich die Fallbackoptionen von Aris doch wieder in meine Version übernehmen.
Nicht jeder mag unter seinem Profil die Grafiken abspeichern.
ABER, ich werde mir da was einfallen lassen, denn das Laden von externen Daten mag ich so gar nicht.
Hier nun meine derzeitige Version.CSS
Alles anzeigen// Scrollbar.uc.js "use strict"; /* Firefox userChrome.js tweaks - 'Custom Scrollbars' for Firefox ************************************************************ */ /* Original by Aris (aris-addons@gmx.net)************************************************************************************* */ /* Github: https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js /* *************************************************************************************************************************** */ /* Customized by Mira********************************************************************************************************* */ /* https://www.camp-firefox.de/forum/thema/135133-custom-scrollbars-uc-js-anpassen/ ****************************************** */ /* Scrollbar.v1.0.6.js https://www.camp-firefox.de/forum/thema/135133/?postID=1207718#post1207718************************** */ /* https://www.camp-firefox.de/forum/thema/136152/?postID=1222989#post1222989************************************************* */ /* Scrollbar.v2.0.2.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223096#post1223096************************** */ /* Scrollbar.v2.0.3.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223124#post1223124************************** */ /* Scrollbar.v2.0.5.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223143#post1223143************************** */ /* Scrollbar.v2.0.6.1.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223162#post1223162************************** */ /* *************************************************************************************************************************** */ /* Custom Scrollbars for Firefox ********************************************************************************************* */ /* Version: 2.0.7 for Firefox 143+ ***************************************************************************************** */ /* ****************************************************************************************************************************** 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 [!] DER STARTUP-CACHE MUSS NACH JEDER ÄNDERUNG GELÖSCHT WERDEN! -> Ordner 'startupCache' finden: Adressleiste > about:profiles > Lokales Verzeichnis > Ordner öffnen > startupCache -> Firefox schließen -> Inhalt des 'startupCache'-Ordners löschen Alternativ mit einem JavaScipt! -> https://github.com/Endor8/userChrome.js/blob/master/Firefox%2087/RestartFirefoxButtonM.uc.js Anpassungen vornehmen > Werte ändern - Optionen aktivieren/deaktivieren: true <-> false - Farbe - Name: red, blue, transparent - Hexcode: #33CCFF, #FFF - rgb(a): rgba(0,0,255,0.8) - hsl(a): hsla(240,100%,50%,0.8) - Zahlen: 1, 2, 3 ... 10, 11, 12 ... - Deckkraft (in Dezimalzahlen): 0.0 bis 1.0 z.B. 1.4 oder 1.75 - Farbverläufe: linear-gradient(direction, color, color, color) - Beispiel für Farbverläufe: linear-gradient(to right, blue, #33CCFF, rgba(0,0,255,0.8)) - vordefinierte Farbverläufe: transparent,rgba(255,255,255,0.5),transparent -> transparent,rgba(255,255,255,0.0),transparent - keine Farbe oder keine Farbwerte -> verwende "unset" */ /* *************************************************************************************************************************** */ (function() { // PROFILE PHATH "CALCULATE" let ProfileDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // GENERAL SCROLLBAR SETTINGS const custom_scrollbar_size_value = 17; // in px // default: custom_scrollbar_size_value = 17 // CUSTOM SCROLLBAR SETTINGS ("custom_scrollbar_" --> "cs_") const custom_scrollbars = true; // default: custom_scrollbars = true const custom_scrollbar_arrows = true; // default: custom_scrollbar_arrows = true const cs_thumb_border = 1; // default: cs_thumb_border = 0 / in px 1 const cs_thumb_roundness = 9; // default: cs_thumb_roundness = 0 / in px 9 const cs_buttons_border = 0; // default: cs_buttons_border = 0 / in px const cs_buttons_roundness = 0; // default: cs_buttons_roundness = 0 / in px const cs_thumb_minimal_size = 12; // default: cs_thumb_minimal_size = 12; / in px const cs_ignore_color_gradients = true; // default: cs_ignore_color_gradients = false / 'flat' scrollbars // CUSTOM SCROLLBAR COLORS/GRADIENTS // - background const cs_background_color = "#DDDDDD"; // default: cs_background_color = "#DDDDDD" let cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" let cs_arrows_on_buttons_buttons_size = 1.0; // default: cs_arrows_on_buttons_buttons_size = 1.0 // - corner const cs_corner_background_color = "#DDDDDD"; // default: cs_corner_background_color = "#DDDDDD" / - 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 const cs_thumb_color = "#33CCFF"; // default: cs_thumb_color = "#33CCFF" / thumb/slider let cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_thumb_hover_color = "#66FFFF"; // default: cs_thumb_hover_color = "#66FFFF" let cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_thumb_border_color = "#33CCFF"; // default: cs_thumb_border_color = "#33CCFF" // - buttons const cs_buttons_color = "#66FFFF"; // default: cs_buttons_color = "#66FFFF" "#5b5b66"/ buttons let cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_buttons_hover_color = "#33CCFF"; // default: cs_buttons_hover_color = "#33CCFF" const cs_buttons_border_color = "#33CCFF"; // default: cs_buttons_border_color = "#33CCFF" "#5b5b66" let cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"; // default: cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"; // 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=''; if(custom_scrollbars === true) custom_scrollbars_code=` slider, scrollcorner, scrollbar thumb, scrollbar scrollbarbutton { appearance: auto; -moz-default-appearance: none !important; } slider { background-color: ${cs_background_color} !important; } scrollbar[vertical] slider { background-image: ${cs_background_image_vertical} !important; } scrollbar[horizontal] slider { background-image: ${cs_background_image_horizontal} !important; } scrollcorner { background-color: ${cs_corner_background_color} !important; background-image: ${cs_corner_background_image} !important; } scrollbar 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 thumb[vertical] { background-image: ${cs_thumb_image_vertical} !important; min-height: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important; } scrollbar thumb[horizontal] { background-image: ${cs_thumb_image_horizontal} !important; min-width: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important; } scrollbar thumb:hover, scrollbar thumb:active { background-color: ${cs_thumb_hover_color} !important; } scrollbar thumb[vertical]:hover, scrollbar thumb[vertical]:active { background-image: ${cs_thumb_hover_image_vertical} !important; } scrollbar thumb[horizontal]:hover, scrollbar 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 ${cs_buttons_border_color} !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; } `; // if(custom_scrollbar_arrows === true && custom_scrollbar_arrows_version === 1) if(custom_scrollbar_arrows === true) custom_scrollbar_arrows_code=` scrollbarbutton[type="increment"], scrollbar[vertical] scrollbarbutton[type="decrement"], scrollbarbutton[type="increment"], scrollbar[horizontal] scrollbarbutton[type="decrement"] { background-repeat: no-repeat; /* background-position: center !important; */ } scrollbar[vertical] > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-hoch_hellgrau.svg") !important; /* background-position: top !important; */ } scrollbar[vertical] > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-runter_hellgrau.svg") !important; /* background-position: bottom !important; */ } scrollbar[horizontal] > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-links_hellgrau.svg") !important; /* background-position: left !important; */ } scrollbar[horizontal] > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-rechts_hellgrau.svg") !important; /* background-position: right !important; */ } /* hover */ scrollbar[vertical] > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-hoch_orange.svg") !important; } scrollbar[vertical] > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-runter_orange.svg") !important; } scrollbar[horizontal] > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-links_orange.svg") !important; } scrollbar[horizontal] > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-rechts_orange.svg") !important; } scrollbar[vertical] > scrollbarbutton { height: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important; max-width: ${custom_scrollbar_size_value}px !important; } scrollbar[horizontal] > scrollbarbutton { width: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important; max-height: ${custom_scrollbar_size_value}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); })() -
-
Phü, nach langem ausprobieren doch geschafft.
JavaScript
Alles anzeigen// ==UserScript== // @name UserCSSLoader (bereinigt) // @description CSS-Codes - Styles laden und verwalten (bereinigte Version) // @namespace http://d.hatena.ne.jp/Griever/ // @author Griever (bereinigt von Andreas Schepers) // @include main // @license MIT License // @charset UTF-8 // @version 0.1.0 // @note Bereinigtes Skript: Nur Hauptmenü "CSS", keine Untermenüs, keine UC-CSS-Unterstützung // ==/UserScript== /* Bedienungsanleitung: CSS-Dateien im Chrome-Ordner im Unterordner "CSS" ablegen. Linksklick auf Stil: Aktivieren/Deaktivieren Mittelklick auf Stil: Aktivieren/Deaktivieren (Menü bleibt offen) Rechtsklick auf Stil: Im Editor öffnen Strg+Rechtsklick: Im Dateimanager anzeigen */ (function(){ /***** Konfiguration *****/ // Position: als frei verschiebbare-Schaltfläche = 0, als Menü anzeigen = 1 let position = 1; // Unterordner für CSS-Dateien let cssFolder = "CSS"; /***** Ende Konfiguration *****/ ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs"); if (window.UCL) { window.UCL.destroy(); delete window.UCL; } window.UCL = { USER_SHEET: Ci.nsIStyleSheetService.USER_SHEET, AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET, AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET, readCSS: {}, get disabled_list() { let obj = []; try { obj = decodeURIComponent(this.prefs.getCharPref("disabled_list")).split("|"); } catch(e) {} delete this.disabled_list; return this.disabled_list = obj; }, get prefs() { delete this.prefs; return this.prefs = Services.prefs.getBranch("UserCSSLoader."); }, get styleSheetServices() { delete this.styleSheetServices; return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); }, get FOLDER() { let aFolder; try { let folderPath = this.prefs.getCharPref("FOLDER"); aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); aFolder.initWithPath(folderPath); } catch (e) { aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile); aFolder.appendRelativePath(cssFolder); } if (!aFolder.exists() || !aFolder.isDirectory()) { aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0o664); } delete this.FOLDER; return this.FOLDER = aFolder; }, init: function() { const cssmenu = $C("menu", { id: "usercssloader-menu", label: "CSS", tooltiptext: "CSS-Styles verwalten\nLinksklick: Aktivieren/Deaktivieren\nMittelklick: Aktivieren/Deaktivieren (Menü bleibt offen)\nRechtsklick: Bearbeiten\nStrg+Rechtsklick: Im Dateimanager öffnen", accesskey: "Y" }); cssmenu.addEventListener("click", (event) => { if (event.button === 1) UCL.rebuild(); }); const menupopup = $C("menupopup", { id: "usercssloader-menupopup" }); cssmenu.appendChild(menupopup); // Schaltfläche in Navigationsleiste einfügen CustomizableUI.createWidget({ id: 'usercssloader-menu-item', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbaritem'); toolbaritem.id = 'usercssloader-menu-item'; toolbaritem.className = 'chromeclass-toolbar-additional'; return toolbaritem; } }); $('usercssloader-menu-item').appendChild(cssmenu); if (position === 1) { let refNode = $('helpMenu'); refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling); } this.rebuild(); this.initialized = true; window.addEventListener("unload", this, false); }, uninit: function() { const dis = []; for (let x of Object.keys(this.readCSS)) { if (!this.readCSS[x].enabled) dis.push(x); } this.prefs.setCharPref("disabled_list", encodeURIComponent(dis.join("|"))); window.removeEventListener("unload", this, false); }, rebuild: function() { let ext = /\.css$/i; let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); if (!ext.test(file.leafName)) continue; let CSS = this.loadCSS(file); CSS.flag = true; } for (let leafName of Object.keys(this.readCSS)) { const CSS = this.readCSS[leafName]; if (!CSS.flag) { CSS.enabled = false; delete this.readCSS[leafName]; } else { delete CSS.flag; this.rebuildMenu(leafName); } } }, loadCSS: function(aFile) { let CSS = this.readCSS[aFile.leafName]; if (!CSS) { CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile); if (this.disabled_list.indexOf(CSS.leafName) === -1) { CSS.enabled = true; } } else if (CSS.enabled) { CSS.enabled = true; } return CSS; }, rebuildMenu: function(aLeafName) { let CSS = this.readCSS[aLeafName]; let menuitem = document.getElementById("usercssloader-" + aLeafName); if (!CSS) { if (menuitem) menuitem.parentNode.removeChild(menuitem); return; } if (!menuitem) { menuitem = $C("menuitem", { label: aLeafName, id: "usercssloader-" + aLeafName, class: "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET ? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET ? "AUTHOR_SHEET" : "USER_SHEET"), type: "checkbox", autocheck: "false", tooltiptext: "Linksklick: an/aus, Menü schließt\nMittelklick: an/aus, Menü bleibt offen\nRechtsklick: bearbeiten\nStrg+Rechtsklick: im Dateimanager anzeigen" }); menuitem.addEventListener("command", () => UCL.toggle(aLeafName)); menuitem.addEventListener("click", (event) => UCL.itemClick(event)); menuitem.addEventListener("mouseup", (event) => { if (event.button === 1) event.preventDefault(); }); document.getElementById("usercssloader-menupopup").appendChild(menuitem); } menuitem.setAttribute("checked", CSS.enabled); }, toggle: function(aLeafName) { let CSS = this.readCSS[aLeafName]; if (!CSS || event.ctrlKey) return; CSS.enabled = !CSS.enabled; this.rebuildMenu(aLeafName); }, itemClick: function(event) { let label = event.currentTarget.getAttribute("label"); event.preventDefault(); event.stopPropagation(); if (event.button === 0) { return; } else if (event.button === 1) { this.toggle(label); } else if (event.button === 2) { if (event.ctrlKey) { UCL.openFolder(label); } else { closeMenus(event.target); this.edit(this.getFileFromLeafName(label)); } } }, getFileFromLeafName: function(aLeafName) { let f = this.FOLDER.clone(); f.QueryInterface(Ci.nsIFile); f.appendRelativePath(aLeafName); return f; }, }; function CSSEntry(aFile) { this.path = aFile.path; this.leafName = aFile.leafName; this.lastModifiedTime = 1; this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ? Ci.nsIStyleSheetService.AGENT_SHEET : /\.author\.css$/i.test(this.leafName) ? Ci.nsIStyleSheetService.AUTHOR_SHEET : Ci.nsIStyleSheetService.USER_SHEET; } CSSEntry.prototype = { sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), _enabled: false, get enabled() { return this._enabled; }, set enabled(isEnable) { let aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); aFile.initWithPath(this.path); let isExists = aFile.exists(); let lastModifiedTime = isExists ? aFile.lastModifiedTime : 0; let isForced = this.lastModifiedTime != lastModifiedTime; let fileURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile); let uri = Services.io.newURI(fileURL, null, null); if (this.sss.sheetRegistered(uri, this.SHEET)) { if (!isEnable || !isExists) { this.sss.unregisterSheet(uri, this.SHEET); } else if (isForced) { this.sss.unregisterSheet(uri, this.SHEET); this.sss.loadAndRegisterSheet(uri, this.SHEET); } } else { if (isEnable && isExists) { this.sss.loadAndRegisterSheet(uri, this.SHEET); } } if (this.lastModifiedTime !== 1 && isEnable && isForced) { console.log(this.leafName + " wurde aktualisiert"); } this.lastModifiedTime = lastModifiedTime; return this._enabled = isEnable; }, }; UCL.init(); function $(id) { return document.getElementById(id); } function $C(name, attr) { const el = document.createXULElement(name); if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) }); return el; } })();Jetzt muss ich nur noch sehen, wie ich das Skript, bzw, die Funktionen in das App-Menü bekomme.
-
Das Skript macht mir zu schaffen!
Bekomme es einfach nicht hin, dass das Untermenü verschwindet
Nein, nicht einfach ausblenden, sondern dass auch die Funktionen (Code) aus dem Skript entfernt wird.Bräuchte nur das "Ein- und Ausschalten der CSS-Dateien, sonst nichts.
-
-
Kann es sein, dass die zweite Trennlinie nur auftaucht, weil Ihr das zusammen gewürfelte Skript nutzt?
Denn ich nutze ja die getrennten Skripte
JavaScript
Alles anzeigen// ==UserScript== // @name OpenWith (Link-Only-Version) // @description Fügt dem Kontextmenü ein Menü hinzu, um einen ausgewählten Link in einem anderen Browser zu öffnen. // @version 1.2.2-mod // @author y2k, angepasst von User // @include main // @charset UTF-8 // @namespace http://tabunfirefox.web.fc2.com/ // @note Anwendungssymbol anzeigen // @note als .uc.js Script umgeschrieben // ==/UserScript== (function() { "use strict"; if (location != 'chrome://browser/content/browser.xhtml') return; /* Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt) Zum Übergeben von Argumenten, wie folgt vorgehen: C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument ※ $1 wird in URL umgewandelt */ const BrowserPath = { "Nightly": "C:\\Program Files\\Firefox Nightly\\firefox.exe", "Firefox": "C:\\Program Files\\Mozilla Firefox\\firefox.exe", "Vivaldi": "C:\\Users\\Andreas\\AppData\\Local\\Vivaldi\\Application\\vivaldi.exe", "Edge": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", "IE": "C:\\Program Files\\Internet Explorer\\iexplore.exe", "Neues Fenster": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>-new-window $1 -foreground", "Neu": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Neu -foreground", }; const FlatMenu = false; const OpenWith = { start: function() { const cm = document.getElementById("contentAreaContextMenu"); cm.addEventListener("popupshowing", function(e) { if (e.target == this) { OpenWith.onpopup(e); } }, false); }, createMenu: function() { // Nur einmal ausführen if (this.linkItem) { return; } const contextMenu = document.getElementById("contentAreaContextMenu"); // Nur noch das Link-Menü erstellen const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit ..." }); contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open")); // Nur noch die Menüeinträge für den Link erstellen this.linkItem = this.createMenuItem(linkMenu, "openLink", FlatMenu? "Link öffnen mit $1 ":" $1"); }, createMenuItem: function(menu, method, format) { const frag = document.createDocumentFragment(); let menuitem = []; for (let i of Object.keys(BrowserPath)) { const item = this.$C("menuitem", { label: format.replace("$1", i), class: "menuitem-iconic", image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16", value: JSON.stringify([ method, i ]), }); item.addEventListener("command", this, false); frag.appendChild(item); menuitem[menuitem.length] = item; } if (!FlatMenu) { const menupopup = this.$C("menupopup"); menupopup.appendChild(frag); menu.appendChild(menupopup); menuitem = [ menu ]; } else { const parent = menu.parentNode; parent.insertBefore(frag, menu); parent.removeChild(menu); } return menuitem; }, $C: function(tag, attrs) { const elem = document.createXULElement(tag); if (attrs) { for (let key of Object.keys(attrs)) elem.setAttribute(key, attrs[key]); } return elem; }, onpopup: function(e) { this.createMenu(); // Logik für das Seiten-Menü wurde entfernt. // Das Link-Menü wird nur angezeigt, wenn man auf einem Link ist. const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec); const linkItemHidden = !isHtml || !gContextMenu.onLink || gContextMenu.onTextInput; const linkItem = this.linkItem; for (let i = 0, l = linkItem.length; i < l; i++) { linkItem[i].hidden = linkItemHidden; } }, handleEvent: function(event) { if (event.type === "command") { // Da es nur noch "openLink" gibt, kann die Logik vereinfacht werden. const [ method, key ] = JSON.parse(event.originalTarget.getAttribute("value")); const url = gContextMenu.linkURL; // Es wird immer die Link-URL sein this.launch(BrowserPath[key], url); } }, launch: function(browserPath, openURL) { let [ path, args ] = browserPath.split("<>"); if (args) { args = args.split(" ").map(a => a.replace("$1", openURL)); } else { args = [ openURL ]; } const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args, args.length, {}); }, }; OpenWith.start(); })();Code
Alles anzeigen// ==UserScript== // @name OpenWith // @description Fügt dem Kontextmenü ein Menü hinzu, zum Öffnen der aktuellen Seite in einem anderen Browser. // @version 1.2.1a 63+ // @author y2k // @include main // @charset UTF-8 // @namespace http://tabunfirefox.web.fc2.com/ // @note Anwendungssymbol anzeigen // @note als .uc.js Script umgeschrieben // ==/UserScript== (function() { "use strict"; if (location != 'chrome://browser/content/browser.xhtml') return; /* Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt) Zum Übergeben von Argumenten, wie folgt vorgehen: C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument ※ $1 wird in URL umgewandelt */ const BrowserPath = { "Nightly": "C:\\Program Files\\Firefox Nightly\\firefox.exe", "Firefox": "C:\\Program Files\\Mozilla Firefox\\firefox.exe", "Vivaldi": "C:\\Users\\Andreas\\AppData\\Local\\Vivaldi\\Application\\vivaldi.exe", "Edge": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", "IE": "C:\\Program Files\\Internet Explorer\\iexplore.exe", "Neues Fenster": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>-new-window $1 -foreground", "Neu": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Neu -foreground", }; const FlatMenu = false; const OpenWith = { start: function() { const cm = document.getElementById("contentAreaContextMenu"); cm.addEventListener("popupshowing", function(e) { if (e.target == this) { OpenWith.onpopup(e); } }, false); }, createMenu: function() { if (this.pageItem) { return; } const contextMenu = document.getElementById("contentAreaContextMenu"); const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "Seite öffnen mit ..." }); // contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-bookmarkpage, :scope > #context-savepage")); contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-sep-selectall")); this.pageItem = this.createMenuItem(pageMenu, "openPage", FlatMenu ? "Seite öffnen mit $1 " : " $1"); }, createMenuItem: function(menu, method, format) { const frag = document.createDocumentFragment(); let menuitem = []; for (let i of Object.keys(BrowserPath)) { const item = this.$C("menuitem", { label: format.replace("$1", i), class: "menuitem-iconic", image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16", value: JSON.stringify([method, i]), }); item.addEventListener("command", this, false); frag.appendChild(item); menuitem[menuitem.length] = item; } if (!FlatMenu) { const menupopup = this.$C("menupopup"); menupopup.appendChild(frag); menu.appendChild(menupopup); menuitem = [menu]; } else { const parent = menu.parentNode; parent.insertBefore(frag, menu); parent.removeChild(menu); } return menuitem; }, $C: function(tag, attrs) { const elem = document.createXULElement(tag); if (attrs) { for (let key of Object.keys(attrs)) elem.setAttribute(key, attrs[key]); } return elem; }, onpopup: function(e) { this.createMenu(); const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec); const pageItemHidden = !isHtml || gContextMenu.onLink || gContextMenu.onTextInput; const pageItem = this.pageItem; for (let i = 0, l = pageItem.length; i < l; i++) { pageItem[i].hidden = pageItemHidden; } }, handleEvent: function(event) { if (event.type === "command") { const [method, key] = JSON.parse(event.originalTarget.getAttribute("value")); const url = gBrowser.currentURI.spec; this.launch(BrowserPath[key], url); } }, launch: function(browserPath, openURL) { let [path, args] = browserPath.split("<>"); if (args) { args = args.split(" ").map(a => a.replace("$1", openURL)); // Split bei Leerzeichen } else { args = [openURL]; } console.log("Call: " + args); const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args, args.length, {}); }, }; OpenWith.start(); })();Dann müsste man mal schauen, in welchem Teil, bei den zusammengeführten Skript die Trennlinie erzeugt wird.
Bitte testet das noch mal mit den zwei separaten Skripten. -
Und unter welchen Umständen stimmt was mit dem Hintergrund und den Slidern nicht?
Endor Welche Konfiguration, und kurze Fehlerbeschreibung bitte.
Würde das gerne heute Nachmittag oder Abend mal nachstellen wollen. -
-
lenny2 Was meinst Du mit Trennzeichen?
Den Doppelpunkt? Kann man ändern.
Z.B. so => const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit ..." });
oder so => const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "Seite öffnen mit ..." });Den Pfeil, der ist doch i.O.
-
-
Endor Du "sprichst" jetzt vom Original, oder?
Und unter welchen Umständen stimmt was mit dem Hintergrund und den Slidern nicht?
Denn ich kann nichts feststellen. -
-
Alles anzeigen
...
Nachdem ich das alles angepasst hatte, und deine beiden Skripte wieder in einer Datei habe, meine Pfade eingetragen...etc. sieht das jetzt so aus:
Bzw. so:
und alles funktioniert wie gewünscht

Mira, dir nochmals ganz herzlichen Dank für deine Zeit und Ausdauer

...
Ein kleiner Nachtrag!
Mir passte es nicht, dass die Menüeinträge einmal an verschiedenen Stellen erschienen
und dann auch noch, an für mich, unpassenden!
Wer möchte, kann einmal für das ""Link öffnen mit:"-Menü diesen Code verwenden,
damit es direkt über dem Separator erscheint
contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));und für das "Seite öffnen mit:"-Menü diesen, damit auch dieses Menü direkt über dem Separator ist.
contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-sep-selectall"));Wer die Menüs an ganz anderer Stelle haben möchte, sucht sich den Selektor, der hinter dem Menü sein soll!
-
-
Das Skript zum Anpassen der Scrollbar funktioniert leider nur noch teilweise!
Die Pfeile werden nicht mehr angezeigt!!
Es ist egal, ob das Original von Aris benutzt wird,
oder dieses =>JavaScript
Alles anzeigen// Scrollbar.uc.js "use strict"; /* Firefox userChrome.js tweaks - 'Custom Scrollbars' for Firefox ************************************************************ */ /* Original by Aris (aris-addons@gmx.net)************************************************************************************* */ /* Github: https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js /* *************************************************************************************************************************** */ /* Customized by Mira********************************************************************************************************* */ /* https://www.camp-firefox.de/forum/thema/135133-custom-scrollbars-uc-js-anpassen/ ****************************************** */ /* Scrollbar.v1.0.6.js https://www.camp-firefox.de/forum/thema/135133/?postID=1207718#post1207718************************** */ /* https://www.camp-firefox.de/forum/thema/136152/?postID=1222989#post1222989************************************************* */ /* Scrollbar.v2.0.2.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223096#post1223096************************** */ /* Scrollbar.v2.0.3.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223124#post1223124************************** */ /* Scrollbar.v2.0.5.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223143#post1223143************************** */ /* Scrollbar.v2.0.6.1.js https://www.camp-firefox.de/forum/thema/136167/?postID=1223162#post1223162************************** */ /* *************************************************************************************************************************** */ /* Custom Scrollbars for Firefox ********************************************************************************************* */ /* Version: 2.0.6.1 for Firefox 111+ ***************************************************************************************** */ /* ****************************************************************************************************************************** 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 [!] DER STARTUP-CACHE MUSS NACH JEDER ÄNDERUNG GELÖSCHT WERDEN! -> Ordner 'startupCache' finden: Adressleiste > about:profiles > Lokales Verzeichnis > Ordner öffnen > startupCache -> Firefox schließen -> Inhalt des 'startupCache'-Ordners löschen Alternativ mit einem JavaScipt! -> https://github.com/Endor8/userChrome.js/blob/master/Firefox%2087/RestartFirefoxButtonM.uc.js Anpassungen vornehmen > Werte ändern - Optionen aktivieren/deaktivieren: true <-> false - Farbe - Name: red, blue, transparent - Hexcode: #33CCFF, #FFF - rgb(a): rgba(0,0,255,0.8) - hsl(a): hsla(240,100%,50%,0.8) - Zahlen: 1, 2, 3 ... 10, 11, 12 ... - Deckkraft (in Dezimalzahlen): 0.0 bis 1.0 z.B. 1.4 oder 1.75 - Farbverläufe: linear-gradient(direction, color, color, color) - Beispiel für Farbverläufe: linear-gradient(to right, blue, #33CCFF, rgba(0,0,255,0.8)) - vordefinierte Farbverläufe: transparent,rgba(255,255,255,0.5),transparent -> transparent,rgba(255,255,255,0.0),transparent - keine Farbe oder keine Farbwerte -> verwende "unset" */ /* *************************************************************************************************************************** */ (function() { // PROFILE PHATH "CALCULATE" let ProfileDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // GENERAL SCROLLBAR SETTINGS const custom_scrollbar_size_value = 17; // in px // default: custom_scrollbar_size_value = 17 // CUSTOM SCROLLBAR SETTINGS ("custom_scrollbar_" --> "cs_") const custom_scrollbars = true; // default: custom_scrollbars = true const custom_scrollbar_arrows = true; // default: custom_scrollbar_arrows = true const cs_thumb_border = 1; // default: cs_thumb_border = 0 / in px 1 const cs_thumb_roundness = 9; // default: cs_thumb_roundness = 0 / in px 9 const cs_buttons_border = 0; // default: cs_buttons_border = 0 / in px const cs_buttons_roundness = 0; // default: cs_buttons_roundness = 0 / in px const cs_thumb_minimal_size = 12; // default: cs_thumb_minimal_size = 12; / in px const cs_ignore_color_gradients = true; // default: cs_ignore_color_gradients = false / 'flat' scrollbars // CUSTOM SCROLLBAR COLORS/GRADIENTS // - background const cs_background_color = "#5b5b66"; // default: cs_background_color = "#DDDDDD" let cs_background_image_vertical = "unset"; // default: cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_background_image_horizontal = "unset"; // default: cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" let cs_arrows_on_buttons_buttons_size = 1.0; // default: cs_arrows_on_buttons_buttons_size = 1.0 // - corner const cs_corner_background_color = "#bfbfbf"; // default: cs_corner_background_color = "#DDDDDD" / - corner let cs_corner_background_image = "unset"; // 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 const cs_thumb_color = "#bfbfbf"; // default: cs_thumb_color = "#33CCFF" / thumb/slider let cs_thumb_image_vertical = "unset"; // default: cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_image_horizontal = "unset"; // default: cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_thumb_hover_color = "orange"; // default: cs_thumb_hover_color = "#66FFFF" let cs_thumb_hover_image_vertical = "unset"; // default: cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_thumb_hover_image_horizontal = "unset"; // default: cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_thumb_border_color = "#5b5b66"; // default: cs_thumb_border_color = "#33CCFF" // - buttons const cs_buttons_color = "#5b5b66"; // default: cs_buttons_color = "#66FFFF" "#5b5b66"/ buttons let cs_buttons_image_vertical = "unset"; // default: cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_image_horizontal = "unset"; // default: cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)" const cs_buttons_hover_color = "#5b5b66"; // default: cs_buttons_hover_color = "#33CCFF" const cs_buttons_border_color = "#5b5b66"; // default: cs_buttons_border_color = "#33CCFF" "#5b5b66" let cs_buttons_hover_image_vertical = "unset"; // default: cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)" let cs_buttons_hover_image_horizontal = "unset"; // 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=''; if(custom_scrollbars === true) custom_scrollbars_code=` slider, scrollcorner, scrollbar thumb, scrollbar scrollbarbutton { appearance: auto; -moz-default-appearance: none !important; } slider { background-color: ${cs_background_color} !important; } scrollbar[orient="vertical"] slider { background-image: ${cs_background_image_vertical} !important; } scrollbar[orient="horizontal"] slider { background-image: ${cs_background_image_horizontal} !important; } scrollcorner { background-color: ${cs_corner_background_color} !important; background-image: ${cs_corner_background_image} !important; } scrollbar 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 thumb[orient="vertical"] { background-image: ${cs_thumb_image_vertical} !important; min-height: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important; } scrollbar thumb[orient="horizontal"] { background-image: ${cs_thumb_image_horizontal} !important; min-width: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important; } scrollbar thumb:hover, scrollbar thumb:active { background-color: ${cs_thumb_hover_color} !important; } scrollbar thumb[orient="vertical"]:hover, scrollbar thumb[orient="vertical"]:active { background-image: ${cs_thumb_hover_image_vertical} !important; } scrollbar thumb[orient="horizontal"]:hover, scrollbar thumb[orient="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 ${cs_buttons_border_color} !important; height: 17px !important; width: 17px !important; } scrollbar[orient="vertical"] scrollbarbutton { background-image: ${cs_buttons_image_vertical} !important; } scrollbar[orient="horizontal"] scrollbarbutton { background-image: ${cs_buttons_image_horizontal} !important; } scrollbar scrollbarbutton:hover { background-color: ${cs_buttons_hover_color} !important; } scrollbar[orient="vertical"] scrollbarbutton:hover { background-image: ${cs_buttons_hover_image_vertical} !important; } scrollbar[orient="horizontal"] scrollbarbutton:hover { background-image: ${cs_buttons_hover_image_horizontal} !important; } `; if(custom_scrollbar_arrows === true) custom_scrollbar_arrows_code=` scrollbarbutton[type="increment"], scrollbar[orient="vertical"] scrollbarbutton[type="decrement"], scrollbarbutton[type="increment"], scrollbar[orient="horizontal"] scrollbarbutton[type="decrement"] { background-repeat: no-repeat; background-position: center !important; */ } scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-hoch_hellgrau.svg") !important; /* background-position: top !important; */ } scrollbar[orient="vertical"] > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-runter_hellgrau.svg") !important; /* background-position: bottom !important; */ } scrollbar[orient="horizontal"] > scrollbarbutton[type="decrement"] { background-image: url("${ProfileDirectory}/Pfeil-links_hellgrau.svg") !important; /* background-position: left !important; */ } scrollbar[orient="horizontal"] > scrollbarbutton[type="increment"] { background-image: url("${ProfileDirectory}/Pfeil-rechts_hellgrau.svg") !important; /* background-position: right !important; */ } /* hover */ scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-hoch_orange.svg") !important; } scrollbar[orient="vertical"] > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-runter_orange.svg") !important; */ } scrollbar[orient="horizontal"] > scrollbarbutton[type="decrement"]:hover { background-image: url("${ProfileDirectory}/Pfeil-links_orange.svg") !important; } scrollbar[orient="horizontal"] > scrollbarbutton[type="increment"]:hover { background-image: url("${ProfileDirectory}/Pfeil-rechts_orange.svg") !important; } scrollbar[orient="vertical"] > scrollbarbutton { height: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important; max-width: ${custom_scrollbar_size_value}px !important; } scrollbar[orient="horizontal"] > scrollbarbutton { width: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important; max-height: ${custom_scrollbar_size_value}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); })() /* ************************************************************************************************************************* */ /* Aris neue Version https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js ***************** */ /* ************************************************************************************************************************* */Kennt jemand die Lösung?