Danke für eure Bemühungen. Wenn ihr mein oben verlinktes Github-Issue bei Aris anschaut und die folgenden Beiträge auf meinen zitierten Beitrag zu dem Problem hier in diesem Forum, wird klar, das im Fx 134 aus der Download-Button Funktion der Event-Handler entfernt wurde (oder so ähnlich, sorry für den Kauderwelsch eines Nur-Bastlers). Der soll durch den Zusatzcode ersetzt werden. Für Nutzer, die einen anderen Skript-Loader benutzen, scheint das zu funktionieren (siehe nochmal das Github-Issue, hier aber nicht.
Beiträge von bege
-
-
Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?
JavaScript: addonbar.us.js
Alles anzeigen// Add-on Bar script for Firefox 126+ by Aris // // no 'close' button // 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS // no 'Add-on Bar' entry in toolbar context menu // // option: smaller buttons / reduced toolbar button height // // flexible spaces on add-on bar behave like on old Firefox versions // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts) var appversion = parseInt(Services.appinfo.version); var compact_buttons = false; // reduced toolbar height and smaller buttons var AddAddonbar = { init: function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* blank tab workaround */ try { if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank'); } catch(e) {} try { Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true); } catch(e) {} var addonbar_label = 'Add-on Bar'; var compact_buttons_code = ''; if(compact_buttons) compact_buttons_code = ` #addonbar toolbarbutton .toolbarbutton-icon { padding: 0 !important; width: 16px !important; height: 16px !important; } #addonbar .toolbarbutton-badge-stack { padding: 0 !important; margin: 0 !important; width: 16px !important; min-width: 16px !important; height: 16px !important; min-height: 16px !important; } #addonbar toolbarbutton .toolbarbutton-badge { margin-top: 0px !important; font-size: 5pt !important; min-width: unset !important; min-height: unset !important; margin-inline-start: 0px !important; margin-inline-end: 0px !important; } #addonbar .toolbaritem-combined-buttons { margin-inline: 0px !important; } #addonbar toolbarbutton { padding: 0 !important; } `; // style sheet Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet( Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(` #addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring], #addonbar toolbarspring { -moz-box-flex: 1 !important; min-width: unset !important; width: unset !important; max-width: unset !important; } #main-window[customizing] #addonbar { outline: 1px dashed !important; outline-offset: -2px !important; } #addonbar { border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important; background-color: var(--toolbar-bgcolor); background-image: var(--toolbar-bgimage); -moz-window-dragging: no-drag !important; } :root[lwtheme] #addonbar { background: var(--lwt-accent-color) !important; } :root[lwtheme][lwtheme-image='true'] #addonbar { background: var(--lwt-header-image) !important; background-position: 0vw 50vh !important; } /* autohide add-on bar in fullscreen mode */ /*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar { visibility: visible !important; display: block !important; min-height: 1px !important; height: 1px !important; max-height: 1px !important; } #main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover { min-height: 24px !important; height: 24px !important; max-height: 24px !important; }*/ #unified-extensions-button[hidden]{ visibility: visible !important; display: flex !important; } `+compact_buttons_code+` `), null, null), Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET ); // toolbar try { if(document.getElementById('addonbar') == null) { var tb_addonbar = document.createXULElement('toolbar'); tb_addonbar.setAttribute('id','addonbar'); tb_addonbar.setAttribute('collapsed', 'false'); tb_addonbar.setAttribute('toolbarname', addonbar_label); tb_addonbar.setAttribute('defaultset','spring,spring'); tb_addonbar.setAttribute('customizable','true'); tb_addonbar.setAttribute('mode','icons'); tb_addonbar.setAttribute('iconsize','small'); tb_addonbar.setAttribute('context','toolbar-context-menu'); tb_addonbar.setAttribute('lockiconsize','true'); tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target'); document.getElementById('browser').parentNode.appendChild(tb_addonbar); CustomizableUI.registerArea('addonbar', {legacy: true}); setTimeout(function(){ CustomizableUI.registerArea('addonbar', {legacy: true}); },2000); CustomizableUI.registerToolbarNode(tb_addonbar); // 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar var key = document.createXULElement('key'); key.id = 'key_toggleAddonBar'; key.setAttribute('key', '/'); key.setAttribute('modifiers', 'accel'); key.setAttribute('oncommand',` var newAddonBar = document.getElementById('addonbar'); setToolbarVisibility(newAddonBar, newAddonBar.collapsed); Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed); `); document.getElementById('mainKeyset').appendChild(key); try { setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled')); } catch(e) {} } } catch(e) {} } } /* initialization delay workaround */ document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false); /* Use the below code instead of the one above this line, if issues occur */ /* setTimeout(function(){ AddAddonbar.init(); },2000); */
Das Problem besteht weiter, obwohl es gerade ein Update für das Skript gab.
Meine Meldung auf Github ist verwaist. Dort gibt es Lösungsvorschläge, die aber wohl nur mit einem anderen Skriptloader funktionieren. Weiß jemand eine Lösung mit "unserem" Skriptloader, also dem in Endors Github?
-
Zitat
Links aus der Adressleiste: ab Fx 60: about:config - browser.urlbar.openintab auf true setzen
Links aus der Suchzeile: about:config - browser.search.openintab auf true setzen
Links aus den Lesezeichen: about:config - browser.tabs.loadBookmarksInTabs auf true setzen
Links zu anderen Seiten: Erweiterung Open Link with New Tab https://addons.mozilla.org/de/firefox/add…k-with-new-tab/
Links im Vordergrund öffnen: about:config browser.tabs.loadBookmarksInBackground auf false setzen
Aus meinem Notizen kopiert. Ob alle Werte noch so stimmen, weis ich nicht. Aber ein Versuch kann nicht schaden.
Genau so steht's in meiner user.js und funktioniert.
-
Kann das jemand bestätigen?
Ist hier auch so.
Klick auf den Button, und es passiert nichts.
Dankeschön! Ich habe das bei Aris gemeldet.
-
Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?
JavaScript: addonbar.us.js
Alles anzeigen// Add-on Bar script for Firefox 126+ by Aris // // no 'close' button // 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS // no 'Add-on Bar' entry in toolbar context menu // // option: smaller buttons / reduced toolbar button height // // flexible spaces on add-on bar behave like on old Firefox versions // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts) var appversion = parseInt(Services.appinfo.version); var compact_buttons = false; // reduced toolbar height and smaller buttons var AddAddonbar = { init: function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* blank tab workaround */ try { if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank'); } catch(e) {} try { Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true); } catch(e) {} var addonbar_label = 'Add-on Bar'; var compact_buttons_code = ''; if(compact_buttons) compact_buttons_code = ` #addonbar toolbarbutton .toolbarbutton-icon { padding: 0 !important; width: 16px !important; height: 16px !important; } #addonbar .toolbarbutton-badge-stack { padding: 0 !important; margin: 0 !important; width: 16px !important; min-width: 16px !important; height: 16px !important; min-height: 16px !important; } #addonbar toolbarbutton .toolbarbutton-badge { margin-top: 0px !important; font-size: 5pt !important; min-width: unset !important; min-height: unset !important; margin-inline-start: 0px !important; margin-inline-end: 0px !important; } #addonbar .toolbaritem-combined-buttons { margin-inline: 0px !important; } #addonbar toolbarbutton { padding: 0 !important; } `; // style sheet Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet( Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(` #addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring], #addonbar toolbarspring { -moz-box-flex: 1 !important; min-width: unset !important; width: unset !important; max-width: unset !important; } #main-window[customizing] #addonbar { outline: 1px dashed !important; outline-offset: -2px !important; } #addonbar { border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important; background-color: var(--toolbar-bgcolor); background-image: var(--toolbar-bgimage); -moz-window-dragging: no-drag !important; } :root[lwtheme] #addonbar { background: var(--lwt-accent-color) !important; } :root[lwtheme][lwtheme-image='true'] #addonbar { background: var(--lwt-header-image) !important; background-position: 0vw 50vh !important; } /* autohide add-on bar in fullscreen mode */ /*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar { visibility: visible !important; display: block !important; min-height: 1px !important; height: 1px !important; max-height: 1px !important; } #main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover { min-height: 24px !important; height: 24px !important; max-height: 24px !important; }*/ #unified-extensions-button[hidden]{ visibility: visible !important; display: flex !important; } `+compact_buttons_code+` `), null, null), Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET ); // toolbar try { if(document.getElementById('addonbar') == null) { var tb_addonbar = document.createXULElement('toolbar'); tb_addonbar.setAttribute('id','addonbar'); tb_addonbar.setAttribute('collapsed', 'false'); tb_addonbar.setAttribute('toolbarname', addonbar_label); tb_addonbar.setAttribute('defaultset','spring,spring'); tb_addonbar.setAttribute('customizable','true'); tb_addonbar.setAttribute('mode','icons'); tb_addonbar.setAttribute('iconsize','small'); tb_addonbar.setAttribute('context','toolbar-context-menu'); tb_addonbar.setAttribute('lockiconsize','true'); tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target'); document.getElementById('browser').parentNode.appendChild(tb_addonbar); CustomizableUI.registerArea('addonbar', {legacy: true}); setTimeout(function(){ CustomizableUI.registerArea('addonbar', {legacy: true}); },2000); CustomizableUI.registerToolbarNode(tb_addonbar); // 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar var key = document.createXULElement('key'); key.id = 'key_toggleAddonBar'; key.setAttribute('key', '/'); key.setAttribute('modifiers', 'accel'); key.setAttribute('oncommand',` var newAddonBar = document.getElementById('addonbar'); setToolbarVisibility(newAddonBar, newAddonBar.collapsed); Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed); `); document.getElementById('mainKeyset').appendChild(key); try { setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled')); } catch(e) {} } } catch(e) {} } } /* initialization delay workaround */ document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false); /* Use the below code instead of the one above this line, if issues occur */ /* setTimeout(function(){ AddAddonbar.init(); },2000); */
-
bis auf Cookies nichts bewirkt, und dafür habe ich schon was anderes.
OT: Was nutzt du?
diese Erweiterung steinalt ist weil re-signed, da wurde in den letzten 5 Jahren nichts dran verändert.
Ich nutze das hier, ist "erst" 4 Jahre alt.
-
Wärst Du so lieb und würdest noch einmal testen?
Hast du es selber getestet? Jetzt wird im Hilfemenü alles drei mal geöffnet.
Du hast jetzt wohl eine Kombination aus den zwei Versionen des AppMenu_edit gemacht, damit die beiden Menüs vollständig sind. Damit werden die Menüs aus Skripten nicht automatisch mit verschoben. Das Menü von extra-config-menu ist ganz verschwunden. Die Firefox-Menüs werden jetzt nicht kopiert, sondern verschoben. Bis auf die Menüs aus Skripten ist die Menüleiste leer und die Alt-Taste zum anzeigen der Menüleiste funktioniert nicht mehr.
Mir ist das zu umständlich. In meiner Version funktioniert alles, was ich brauche. Wenn Jizz (wer ist das?) bereit ist, die Fehler zu überarbeiten, bin ich gern bereit, nochmal zu testen. Für uns "Bastler" scheint mir das zu kompliziert.
-
Meine Version sieht so aus, davon gibt es aber noch andere Versionen in diesem Forum. Bei Endor wird es sicher auch eine Version geben.
JavaScript
Alles anzeigen// ==UserScript== // @name extras_config_menu.uc.js // @compatibility Firefox ab 92 // @include main // @version........1.0.20180914 Aktualisierung von aborix für Firefox 62+ // @version 1.0.20190504 überarbeitet von bege // ==/UserScript== var uProfMenu = { // Beginn der Konfiguration ----------------- // In der folgenden Zeile den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen: TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe', // Falls gewuenscht, in der Zeile nach den Beispielen einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele: // vFileManager: 'E:\\Total Commander\\Totalcmd.exe', // vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe' vFileManager: 'C:\\Program Files\\FreeCommander XE\\FreeCommander.exe', // Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind, // in der folgenden Zeile das Unterverzeichnis eintragen, sonst '': jsSubfolder: 'JS', // Im Folgenden bei "warmenuto" 'menu' eintragen, damit es in der Menueleiste erscheint, sonst die id des gewuenschten // Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton') // Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen: warpmenuto: 'menu', // Für die Einstellung 'menu' wird hier der Ort festgelegt, wo das Menü angezeigt werden soll. // (0: in der Menueleiste, 1: im Extras-Menue) menuLocation: 0, // Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen) sortScripts: 0, // 1 zum Erzwingen der Sortierung // Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]): gmOrdner: 0, // Einbindung CSS-Ordner (0: nein, 1: ja, Chrome-Unterordner, 2: ja, anderer Pfad): cssOrdner: 0, // Wenn cssOrdner = 1 oder 2, hier entweder Chrome-Unterordner (z.B. 'CSS') oder andere vollständige Pfade (z.B. 'C:\\Dropbox\\Chrome\\Thunderbird\\CSS-Ordner\\css-dateien') entragen, sonst '': cssLocation1: 'CSS', cssLocation2: '', cssLocation3: '', //Anzeigenamen für die CSS-Ordner cssLocation1Name: 'CSS-Ordner', cssLocation2Name: 'CSS-Ordner2', cssLocation3Name: 'CSS-Ordner3', // In einer der folgenden Zeilen gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen. // - Zum Ausblenden: abouts: [], // - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein: // abouts: ['0','about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'], // abouts: ['about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'], abouts: [], // Einbindung config-Dateien wie user.js etc. (0: nein, 1: ja) configFiles: 0, // Die Firefox-Ordner anzeigen (0: nein, 1: ja): firefoxOrdner: 0, // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja): showNormalPrefs: 0, // Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0): enableScriptsToClip: 3, // Den Eintrag "Neustart" anzeigen (0: nein, 1: ja): enableRestart: 0, // Ende der Konfiguration ------------------- init: function() { if (this.warpmenuto.toLowerCase() == 'menu') { // aufgrund des gewaehlten warpmenuto als Menue anlegen if (this.menuLocation) { var zielmenu = document.getElementById('appMenu-toolsView'); } else { var zielmenu = document.getElementById('main-menubar'); } if (zielmenu==null) { userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " + "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " + "von 'zielmenu' kontrollieren."); return; } var menu = zielmenu.appendChild(this.createME("menu","Config-Menü",0,0,"ExtraConfigMenu")); menu.setAttribute("class","menu-iconic"); menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');"); menu.setAttribute("tooltiptext","Doppelklick öffnet about:config"); } else { // als Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt) var zielmenu = document.getElementById(this.warpmenuto); if (zielmenu==null) { userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " + "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " + "von 'warpmenuto' kontrollieren."); return; } var menu = zielmenu.parentNode.insertBefore(document.createXULElement('toolbarbutton'), zielmenu.nextSibling); menu.setAttribute("id", "ExtraConfigMenu-button"); menu.setAttribute("class", "toolbarbutton-1"); menu.setAttribute("type", "menu"); menu.setAttribute("tooltiptext", "Extra Config Menü\nMittelklick \öffnet about:config"); menu.setAttribute("onclick", "if (event.button === 1 && !this.open) {openTrustedLinkIn('about:config','tab')};"); } //ab hier ist alles gleich, egal ob Button oder Menue var css = " \ /* #ExtraConfigMenu, */ #ExtraConfigMenu-button { \ background: 12px no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=) \ } \ // #ExtraConfigMenu .menubar-text { \ // margin-inline-start: 34px !important;\ // }\ #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \ display: none !important; \ }"; var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET); menu.setAttribute("onpopupshowing","uProfMenu.getScripts(0)"); var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup")); // Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter) var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items")); // var submenu=menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul")); // var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items")); menupopup.appendChild(this.createME("menuitem","us.js-Datei erstellen","uProfMenu.createJSfile()","uProfMenu_createJSfile",0)); if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0)); // Ende Anlegen von Untermenues fuer die userChromeJS-Skripte if (this.configFiles) menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von Konfigdateien if (this.configFiles) { menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(3,'userChrome.js');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(3,'userChrome.css');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(3,'userContent.css');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0); }; // Ende Einbindung von Konfigdateien if (this.gmOrdner || this.cssOrdner) menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von Ordnern switch (this.gmOrdner) { case 1: menupopup.appendChild(this.createME("menuitem","GM-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0); break; case 2: menupopup.appendChild(this.createME("menuitem","USL-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0); break; case 3: menupopup.appendChild(this.createME("menuitem","Scriptish-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0); break; } if (this.cssOrdner) { if (this.cssOrdner == 1) { menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation1);","uProfMenu_folder"),0); if (this.cssLocation2.length>0) { menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0); }; if (this.cssLocation3.length>0) { menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0); }; } else {menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.cssLocation1);","uProfMenu_folder"),0); if (this.cssLocation2.length>0) { menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.cssLocation2);","uProfMenu_folder"),0); }; if (this.cssLocation3.length>0) { menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.cssLocation3);","uProfMenu_folder"),0); }; } } if (this.firefoxOrdner) menupopup.appendChild(document.createXULElement('menuseparator')); if (this.firefoxOrdner) { menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0); } // Ende Einbindung von Ordnern if (this.abouts.length>0 || this.showNormalPrefs) menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von abouts if (this.abouts.length>0) { // falls der erste Eintrag des arrays ='0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden if (this.abouts[0]=='0') { for (var i = 1; i < this.abouts.length; i++) { menupopup.appendChild(this.createME("menuitem",this.abouts[i],"openTrustedLinkIn('"+this.abouts[i]+"','tab')","uProfMenu_about"),0); } } else { // der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items")); this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1); } }; // Ende Einbindung von abouts // Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0); if (this.enableRestart) menupopup.appendChild(document.createXULElement('menuseparator')); // Falls enableRestart = 1, Neustart-Menuepunkt zur Verfügung stellen if(this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart", "Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit,0);")); }, getDirSep:function() { // Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS; var dirsep="/"; switch(osString) { case "WINNT": dirsep="\\"; break; case "Linux": dirsep="/"; break; case "Darwin": dirsep="/"; break; } return dirsep; }, edit:function(OpenMode,Filename){ var Path = ""; var dSep = this.getDirSep(); // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen switch (OpenMode){ //Current is Chrome Directory or Subfolder case 0: if (this.jsSubfolder.length != 0) { var Path = this.getPrefDirectoryPath("UChrm") + dSep + this.jsSubfolder + dSep + Filename; } else { var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; } break; //Current is Profile Directory case 1: var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename; break; //Current is Root case 2: var Path = Filename; break; //Current is Chrome Directory case 3: var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break; } this.launch(this.TextOpenExe,Path); }, dirOpen:function(Path){ if (this.vFileManager.length != 0) { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); var args=[Path]; file.initWithPath(this.vFileManager); process.init(file); // Verzeichnis mit anderem Dateimanager oeffnen process.run(false, args, args.length); } else { // Verzeichnis mit Dateimanager des Systems oeffnen var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); dir.initWithPath(Path); dir.launch(); } }, prefDirOpen:function(prefDir){ Path = this.getPrefDirectoryPath(prefDir); this.dirOpen(Path); }, getPrefDirectoryPath:function(str){ // get profile directory var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get(str, Components.interfaces.nsIFile); // folgende 3 Zeilen nur für Firefox, nicht für Thunderbird if (str == 'CurProcD') { file = file.parent; }; return file.path; }, launch:function(RanPath,OpenPath){ var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile); var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); var args = [OpenPath]; file.initWithPath(RanPath); // falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen: if (!file.exists()) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); RanPath=pref.getCharPref("view_source.editor.path"); file.initWithPath(RanPath); } proc.init(file); proc.run(false, args, args.length); }, stringComparison:function(a, b){ a = a.toLowerCase(); a = a.replace(/ä/g,"a"); a = a.replace(/ö/g,"o"); a = a.replace(/ü/g,"u"); a = a.replace(/ß/g,"s"); b = b.toLowerCase(); b = b.replace(/ä/g,"a"); b = b.replace(/ö/g,"o"); b = b.replace(/ü/g,"u"); b = b.replace(/ß/g,"s"); return(a==b)?0:(a>b)?1:-1; }, getScripts:function(iType) { // Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf let ucJsScripts = []; // let ucXulScripts = []; // Suchmuster, also die Dateierweiterungen uc.js und uc.xul let extjs = /\.uc\.js$/i; // let extxul= /\.uc\.xul$/i; let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); if (this.jsSubfolder.length != 0) { aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+uProfMenu.getDirSep()+this.jsSubfolder); } else { aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path); }; // files mit Eintraegen im Chrome-Ordner befuellen let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); // keine gewuenschte Datei, deshalb continue if (!extjs.test(file.leafName) /* && !extxul.test(file.leafName) */) continue; // uc.js gefunden -> im Array ablegen if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName); // uc.xul gefunden -> im Array ablegen // if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName); } if (this.sortScripts) { ucJsScripts.sort(this.stringComparison); // ucXulScripts.sort(this.stringComparison); } // Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen if (iType==0) { this.fillMenu("submenu-ucjs","submenu-ucjs-items", "uc.js",ucJsScripts,"uProfMenu_ucjs",0); // this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0); } else { var result=this.fillClipboardValue(ucJsScripts/* ,ucXulScripts */); Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result); } }, fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) { // Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen var e = document.getElementById(whichsubmenu); e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')'); var popup = document.getElementById(whichsubmenuitems); // zunaechst Untermenue zuruecksetzen while(popup.hasChildNodes()){ popup.removeChild(popup.firstChild); } // Untermenue endlich befuellen for (var i = scriptArray.length-1; i > -1; i--) { // bisher nur eine Typunterscheidung (userChromeJS-Skript oder about:) if (sTyp==0){ var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0); mitem.setAttribute("onclick","uProfMenu.openAtGithub(event,'"+scriptArray[i]+"')"); mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" oeffnen,\n Rechtsklick: Suche auf GitHub"); } else { var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0); } popup.insertBefore(mitem, popup.firstChild); } }, fillClipboardValue:function(sArray/* ,xArray */) { var retValue; var s = 0; // var x = 0; s = sArray.length; // x = xArray.length; switch(this.enableScriptsToClip) { case 1: retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n"); // "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n"); break; default: retValue = "userChromeJS/uc.js ("+s+"):\n------------------------"; for (var i = 0; i < s ; i++) { j = i + 1; retValue = retValue + "\n" + j + ". " + sArray[i]; } // retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------"; // if (this.enableScriptsToClip==2) s = 0; // for (var i = 0; i < x ; i++) { // j = i + s + 1; // retValue = retValue + "\n" + j + ". " + xArray[i]; // } break; } return retValue; }, createME:function(sTyp,sLabel,sCommand,sClass,sId) { // Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var m = document.createElementNS(XUL_NS, sTyp); switch (sTyp) { case "menuitem": // this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0) m.setAttribute('label', sLabel); m.setAttribute('oncommand',sCommand); m.setAttribute('class',sClass); break; case "menu": // this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues") m.setAttribute('label', sLabel); m.setAttribute('id', sId); break; case "menupopup": //this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups"); m.setAttribute('id', sId); break; } return m; }, openAtGithub:function(e,sScript) { if (e.button==1){ // Mittelklick - Seite auf GitHub oeffnen (funktioniert nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen): e.preventDefault(); var sUrl="https://github.com/Endor8/userChrome.js/tree/master/"+this.cleanFileName(sScript); openWebLinkIn(sUrl, 'tab'); } if (e.button==2){ // Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist): e.preventDefault(); var sUrl="https://github.com/search?langOverride=&language=&q="+this.cleanFileName(sScript)+"&repo=&start_value=1&type=Code"; openWebLinkIn(sUrl, 'tab'); } }, createJSfile: function(Filename) { if (!Filename) Filename = prompt("Name des Skripts", "skriptName"); if (Filename) Filename = Filename.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, ""); if (!Filename || !/\S/.test(Filename)) return; if (!/\.uc.js$/.test(Filename)) Filename += ".uc.js"; this.edit(0, Filename); }, cleanFileName:function(sName) { sName=sName.toLowerCase(); /* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen: /Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/ / "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen */ var regs=[/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/]; for (var i = 0; i < regs.length; i++) { sName=sName.replace(regs[i],""); } return sName; } }; uProfMenu.init();
-
Das Menü des Skripts "extra-config-menu.us.js" funktioniert nicht mehr.
Das funktioniert hier einwandfrei.
Ich habe es als Menü in der Menüleiste und verschiebe es auch mit AppMenu_edit ins AppMenu. Dort funktioniert es nicht mehr.
-
Und hier das zweite, um die Menüs der Menüleiste zu spiegeln (klonen):
Danke für deine Nachricht. Zwar ist jetzt das Untermenü "Ansicht/Symbolleisten" vollständig, aber es treten diese Probleme auf:
Bei mir ist mit diesem Skript das Hilfemenü unvollständig ("Seitenproblem melden" und "Betrügerische Website melden" fehlen). Das gleiche gilt für das Menü "Extras" und dessen Untermenü "Browser-Werkzeuge".
Im Hilfemenü wird alles doppelt geöffnet.
Das Menü des Skripts "extra-config-menu.us.js" funktioniert nicht mehr.
-
Wenn du auf dem ublock-Button allerdings das Auge ausge-x-t siehst, dann sind solche kosmetischen Filter nicht wirksam.
Au Mann, das wars! Echt peinlich, dass ich das nicht gefunden habe. 🙈Zum Glück habe ich nicht noch Stunden lang weiter gesucht, sondern hier gefragt. Vielen Dank!
Nachtrag - auch der Filter bei DDG funktioniert bei mir, allerdings solltest du nicht dieses Tag nehmen, sondern jenes:
duckduckgo.com##a[href*="camp-firefox.de"]:upward(li[data-layout="organic"])
Warum meinst du das?
-
Ich nutze schon lange uBlock Origin, um Suchergebnisse von nervigen Websites auf duckduckgo.com und startpage.com auszublenden.
Das hat so lange funktioniert, bis dort die class-Namen geändert wurden. Das habe ich jetzt wieder angepasst, aber jetzt funktioniert es nur noch auf duckduckgo.com und nicht mehr auf startpage.com.
Hier zwei Beispiele aus dem Tab "Meine Filter":
duckduckgo.com##a[href*="file.net"]:upward(.wLL07_0Xnd1QZpzpfR4W)
startpage.com##a[href*="file.net"]:upward(.result)
Ich habe alles mögliche probiert: eu.startpage.com, weil ich diese URL nutze, mit den zwei classes experimentiert, die dem Suchergebnis-div zugeordnet sind - hat alles nichts genützt.
Wo liegt der Fehler?
-
Beim Verschieben des Menüs "Ansicht"
in das mit Appmenu.uc.js erstellte Firefox-Menü RE: userChrome.js Scripte für den Fuchs (Diskussion) verschwinden im Untermenü "Symbolleisten" die ersten beiden Menüeinträge.
Mir ist aufgefallen, dass diese beiden Einträge das Attribut toolbarId haben, was die anderen Menüeinträge auch anderer Menüs nicht haben. Hängt das damit zusammen?
menuitem label="Menüleiste" id="toggle_toolbar-menubar" toolbarId="toolbar-menubar"
menu label="Lesezeichen-Symbolleiste" id="toggle_PersonalToolbar" toolbarId="PersonalToolbar"
Fällt dir ein Workaround ein, um diese Menüeinträge auch im verschobenen Menü angezeigt zu bekommen?
Edit: Diese beiden Einträge werden in "https://searchfox.org/mozilla-centra…menubar.inc#125 im Ansicht-Menü gar nicht definiert! Sie tauchen auch an an anderen Stellen in der Benutzeroberfläche mit der gleichen ID auf. Und die IDs scheinen auch nicht fest definiert zu sein, sondern z.B. in einer solchen Codezeile https://searchfox.org/mozilla-centra…-places.js#1463
Ich konnte nicht herausfinden, wo und wie diese Menüeinträge und ihre IDs definiert werden.
-
Hm, da fällt mir nichts ein. Hier funktioniert alles, bis auf Ansicht/Symbolleiten. Da fehlen nach dem Verschieben die ersten zwei Einträge, das war mir noch nicht aufgefallen. Das könnte allerdings auch ein älterer Fehler sein, weil ich das Menü kaum nutze.
Du hast das browser-menubar.uc.js mit den drei Änderungen genommen? Hast du ins Log geschaut, ob es geladen wird und keinen Fehler hat?
-
Kannst Du bitte mal auf das oder die Skripte verlinken? Besonders jenes, welches es fertigbringt, alle Menüs aus der Menüleiste in das Appmenü zu verschieben. Bitte.
Das Skript zum Verschieben kennst du schon. Und das zusätzliche, das die verschobenen Menüs wieder funktionsfähig macht, ist hier RE: userChrome.js Scripte für den Fuchs (Diskussion)
(Chronik und Lesezeichen verschiebe ich nicht, die öffne ich über Buttons.) -
Wie würdet Ihr Euch so ein zusätzliches Menü vorstellen und welche Funktionen sollte es präsentieren?
Ich nutze das "alte" aktualisierte AppMenu.uc.js wie im anderen Thema besprochen und es enthält das, was ich so nutze. Nachdem das Verschieben der Menüs aus der Menüleiste in dieses Menü nun auch wieder klappt, brauche ich nichts anderes.
-
...
Das ist eine Folge dieser Änderung:
https://bugzilla.mozilla.org/show_bug.cgi?id=1893068
Vielleicht geht es schöner, aber das Einfachste ist, wir duplizieren etwas Code. Füge im zweiten Script in Zeile 33 (also da, wo jetzt eine leere Zeile ist) Folgendes ein:
...
Nochmal Danke für diesen Tipp. Ohne den wäre ich aufgeschmissen gewesen.
Wenn nach einem Update etwas mehr nicht funktioniert, ist es für mich einfacher das ganze Skript zu kopieren, anstatt es in einem der Skripte "AppMenu.uc.js oder "AppMenu_edit.uc.js" nachzubauen und nach Änderungen zu suchen. Deshalb habe ich das Skript als eigenes uc.js-Skript angelegt.
Das Skript ist hier zu finden:
browser-menubar.js - mozsearch
Ich habe nur die Zeilen 8 und 117 hinzugefügt und die Zeile 12 geändert. Die andere Arbeit überlasse ich lieber weiterhin den Mozilla-Entwicklern. 😉
Es sieht jetzt so aus:
JavaScript: browser-menubar.uc.js
Alles anzeigen/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* eslint-env mozilla/browser-window */ (function () { // ZUGEFÜGT! document.addEventListener( "DOMContentLoaded", () => { let mainMenuBar = document.getElementById("AMpopup"); // GEÄNDERT! mainMenuBar.addEventListener("command", event => { switch (event.target.id) { // == edit-menu == case "menu_preferences": openPreferences(undefined); break; // == view-menu == case "menu_pageStyleNoStyle": gPageStyleMenu.disableStyle(); break; case "menu_pageStylePersistentOnly": gPageStyleMenu.switchStyleSheet(null); break; case "repair-text-encoding": BrowserCommands.forceEncodingDetection(); break; case "documentDirection-swap": gBrowser.selectedBrowser.sendMessageToActor( "SwitchDocumentDirection", {}, "SwitchDocumentDirection", "roots" ); break; // == history-menu == case "sync-tabs-menuitem": gSync.openSyncedTabsPanel(); break; case "hiddenTabsMenu": gTabsPanel.showHiddenTabsPanel(event, "hidden-tabs-menuitem"); break; case "sync-setup": gSync.openPrefs("menubar"); break; case "sync-enable": gSync.openPrefs("menubar"); break; case "sync-unverifieditem": gSync.openPrefs("menubar"); break; case "sync-syncnowitem": gSync.doSync(event); break; case "sync-reauthitem": gSync.openSignInAgainPage("menubar"); break; case "menu_openFirefoxView": FirefoxViewHandler.openTab(); break; // == menu_HelpPopup == // (Duplicated in PanelUI._onHelpCommand) case "menu_openHelp": openHelpLink("firefox-help"); break; case "menu_layout_debugger": toOpenWindowByType( "mozapp:layoutdebug", "chrome://layoutdebug/content/layoutdebug.xhtml" ); break; case "feedbackPage": openFeedbackPage(); break; case "helpSafeMode": safeModeRestart(); break; case "troubleShooting": openTroubleshootingPage(); break; case "help_reportSiteIssue": ReportSiteIssue(); break; case "menu_HelpPopup_reportPhishingtoolmenu": openUILink(gSafeBrowsing.getReportURL("Phish"), event, { triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}), }); break; case "menu_HelpPopup_reportPhishingErrortoolmenu": ReportFalseDeceptiveSite(); break; case "helpSwitchDevice": openSwitchingDevicesPage(); break; case "aboutName": openAboutDialog(); break; case "helpPolicySupport": openTrustedLinkIn(Services.policies.getSupportMenu().URL.href, "tab"); break; } }); document .getElementById("menu_EditPopup") .addEventListener("popuphidden", () => { updateEditUIVisibility(); }); }, { once: true } ); }) (); // ZUGEFÜGT!
-
Weiß irgendjemand zufällig, wie man in einem Untermenü (subdir) einen Separator erstellt?
Und wie schaut es mit einem Untermenü in einem Untermenü aus? Wie geht das?Meinst du im Skript Appmenu.uc.js? Da sind Separatoren drin. Einfach abgucken. Da funktioniert es anders als in "normalen" Skripten, wie es Endor geschrieben hat.
-
Nur, verrate mir, uns, doch wie Du dem Code auf die Schliche gekommen bist. Bitte.
Hm, blindes Huhn findet auch mal'n Korn. Mal schauen, ob ich es noch rekonstruieren kann.
- In den Browser-Werkzeugen gibt es beim Eintrag der Entwickler-Werkzeuge im Extras-Menü den Punkt event
- Da zwei Mal geklickt ist der Befehl gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now()); zu sehen
- Dann habe ich versucht, die Struktur des Skripteintrags für die Browser-Konsole auf diesen Befehl anzuwenden
Ich habe auch im Firefox Quellcode https://searchfox.org/mozilla-central/source nach den Pfaden gesucht, die in den Variablen angegeben sind, aber das mich in diesem Fall nicht viel weiter gebracht.
Edit: Doch was im Quellcode gefunden, nämlich dass innerhalb der Datei devtools/client/framework/devtools-browser.js der Befehl toggleToolboxCommand heißt. Also habe ich vermutet, dass ich entsprechend dem Code für die Browser-Konsole den Teil davor als Variable definieren muss.
Aber wie gesagt, blindes Huhn ..., oder ein Bastler braucht halt im Unterschied zu einem Programmierer viel Zeit und Glück.
Ich habe auch etwas gebastelt, aber immer noch ohne appmenu_edit.uc.js. Es ist eine Notlösung. Ich habe einfach die Hilfe-Einträge in der appmenu.uc.js angelegt. Nutzt sie oder nutzt sie nicht.
Ja, da besteht mit AppMenu_edit.uc.js das gleiche Problem, dass der Klick auf einen Menüeintrag imitiert wird, anstatt dass der zugrunde liegende Befehl aufgerufen wird.
Jetzt muss ich aber ins Bett. Gute Nacht
-
Puh! Gefunden.
So lautet der direkte Befehl, der nicht vom Klick auf den Menüeintrag abhängig ist. Damit funktioniert's auch mit AppMenu_edit.uc.js. Hier der ganze Abschnitt für das Skript:
JavaScript{ name: 'Entwickler-Werkzeuge', command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\ var { gDevToolsBrowser } = require('devtools/client/framework/devtools-browser');\ gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());", subdir: 'Firefox Funktionen', image:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqJJREFUeNp0k11IU2EYx593Q0RDL1wOmheihBCoiNHFrIYgYSBDKoRMIWgwduGFjTiIdRHiQIw+iBAS6qKUrJsVlRGsC2vWRUFzEclmxMZKXWzObe377PR/cLOB64Xfzt7zPv/f+8URAwMDVNoUReGHGeRAGITy+bwfbIB0JpMhWZZ369X19fXGqqqqbgR1wJPNZrngK9jAf11bW9vRlpaWE5FI5EAikVBDEkJdblfg8/m6nU7nXeDa3NxcTiaTVFlZyQVRCHyBQEBjsVguGI3G0zU1NQ0ej0eg5gcmyEBGahTq7Ha7a3JycsjtdtcGg8FliIgH0+l0DmRTqZS2tbX1mE6nO9TU1LTf4XAEcrmcF5AKguder3d6eHh4HjMNYUsSD/j9ftre3qZoNPoLYj+vDHJqbGzUx+NxLY9xX1Xcy9ra2rTJZJofGRkZ0mq1Eh/U+vo6bW1txVQqlZb7fIDYVkUsFmPaIac9rbm5WcKWVjo6OqTjtbX7Ojs7pcXFxRW9Xn+dbweysaWlJZ9GozHX1dX1ULmGfUoLkvTWWV3tdptMQe6XDLezJBwOK4XrLttO3Sf6o0xNKfaKisCMEIdXhSALKLQeluB5sFz4PHDNdnUpqJBD/f0RhJ99E+KSC4KZf5Ky7Qr4YjAYeHnJk0QTL4k+xc1mBeEXn4WQPkBw8z8SPqTVvr4+DqeA9Sx+nhLZ7JAkR0cVhF+9F2LsDQRPMHamJHwLfB8cHORwBtzmlyxAmIttjyHJjI8rCDscQlxmwXwhfAf4zVhm4QOaK1qLAoTpISQPIJEnJhSE3y0QXS0KflutVg7LJdI9AoQJN2O7BwnfzizRR0B8GhfBDfAInCuGr/Wq6UiDoMRPhWKvZUrjXXZniTbM1ivvbHvurwADAH3gYJeBXh2yAAAAAElFTkSuQmCC', },
Endor Magst du das auf Github noch ändern?