Beiträge von Endor
-
-
-
R.I.P.
Mfg.
Endor -
Hallo Fuchsi.
Was Office 2010 und Adobe betrifft, da kannst Du ohne Sorgen das
Update von Windows 7 nach Windows 10 machen. Habe ich hier auch
gemacht. Und keinerlei Probleme nachher bemerkt oder gehabt.Mfg.
Endor -
-
-
mit einer Ausnahme bei Lesezeichen.
In dieser Version funktioniert Lesezeichen jetzt auch:
JavaScript
Alles anzeigen// ==UserScript== // @name MenubarReplaceWithButton.uc.js // @description Hauptmenü durch Schaltflächen ersetzen // @author unknown // @version 0.1.3 // @include main // @note 20260705 Menüleiste der ersten Ebene erstellt keinen Platzhalterknoten mehr für menu-iconic-left. // @note 20260705 Menüleiste wurde in eine Menüstruktur ohne Symbole geändert, und der Menü-Symbol-Knoten wurde entfernt. // ==/UserScript== (function () { if (location != "chrome://browser/content/browser.xhtml") return; const BUTTON_ID = "main-menubar_button"; const POPUP_ID = "main-menubar_popup"; try { CustomizableUI.createWidget({ id: BUTTON_ID, type: "custom", defaultArea: CustomizableUI.AREA_NAVBAR, onBuild(aDocument) { let toolbaritem = aDocument.createXULElement("toolbarbutton"); setButtonAttributes(toolbaritem); return toolbaritem; }, }); } catch (e) {} window.addEventListener("MozAfterPaint", init, { once: true }); function init() { let mainMenuBarButton = document.getElementById(BUTTON_ID); let menubar = document.getElementById("main-menubar"); if (!mainMenuBarButton || !menubar) return; setButtonAttributes(mainMenuBarButton); let menupopup = document.getElementById(POPUP_ID); if (!menupopup) { menupopup = document.createXULElement("menupopup"); menupopup.setAttribute("id", POPUP_ID); menupopup.setAttribute("position", "after_start"); } if (menupopup.parentNode !== mainMenuBarButton) { mainMenuBarButton.append(menupopup); } menupopup.removeAttribute("onpopupshowing"); menupopup.removeAttribute("onpopuphiding"); moveMenubarMenus(menubar, menupopup); installPopupHandlers(mainMenuBarButton, menupopup); } function setButtonAttributes(toolbaritem) { let label = Services.locale.appLocaleAsBCP47.includes("zh") ? "Hauptmenü" : "Menüleiste"; let props = { id: BUTTON_ID, class: "toolbarbutton-1 chromeclass-toolbar-additional", removable: false, label, tooltiptext: label, style: 'list-style-image: url("chrome://global/skin/icons/more.svg");', type: "menu", }; for (let p in props) { toolbaritem.setAttribute(p, props[p]); } toolbaritem.removeAttribute("popup"); } function moveMenubarMenus(menubar, menupopup) { let menus = Array.from(menubar.childNodes).filter(node => node.nodeName === "menu"); for (let menu of menus) { normalizeTopLevelMenu(menu); menupopup.append(menu); } } function normalizeTopLevelMenu(menu) { menu.removeAttribute("class"); let menutxt = menu.firstChild; if (!menutxt?.classList?.contains("menubar-text")) return; menutxt.classList.remove("menubar-text"); menutxt.classList.add("menu-text"); menutxt.setAttribute("flex", "1"); for (let child of Array.from(menu.children)) { if ( child.classList?.contains("menu-iconic-left") || child.classList?.contains("menu-icon") ) { child.remove(); } } if (!menutxt.nextElementSibling?.classList?.contains("menu-accel-container")) { menutxt.after(MozXULElement.parseXULToFragment(` <hbox class="menu-accel-container" anonid="accel" aria-hidden="true"> <label class="menu-iconic-accel"/> </hbox> <hbox align="center" class="menu-right" aria-hidden="true"> <image/> </hbox> `)); } } function installPopupHandlers(mainMenuBarButton, menupopup) { if (menupopup._menubarReplaceWithButtonInstalled) return; menupopup._menubarReplaceWithButtonInstalled = true; mainMenuBarButton.addEventListener("dragover", () => { mainMenuBarButton.openMenu(true); }); mainMenuBarButton.addEventListener("dragleave", event => { if (event.relatedTarget && !event.relatedTarget.closest("menupopup")) { mainMenuBarButton.openMenu(false); } }); window.addEventListener( "keydown", event => { if ( event.getModifierState("Shift") || event.getModifierState("Control") || event.getModifierState("Meta") || (event.key !== "Alt" && event.key !== "F10") ) { return; } event.stopPropagation(); event.preventDefault(); if (event.repeat) return; if (menupopup.state === "open") { mainMenuBarButton.openMenu(false); } else { mainMenuBarButton.openMenu(true); } }, true ); menupopup.addEventListener("popupshowing", function (event) { if (event.target === menupopup) { mainMenuBarButton.setAttribute("open", "true"); } if (AppConstants.platform != "macosx") { if (event.target.parentNode?.parentNode == this) { this.setAttribute( "openedwithkey", event.target.parentNode.openedWithKey ); } } handlePopupShowing(event); }); menupopup.addEventListener("popuphiding", event => { if (event.target === menupopup) { mainMenuBarButton.removeAttribute("open"); } }); menupopup.addEventListener("command", handleCommand); document .getElementById("menu_EditPopup") ?.addEventListener("popuphidden", () => { updateEditUIVisibility(); }); } function handleCommand(event) { switch (event.target.id) { case "menu_preferences": case "menu_settings": openPreferences(undefined); break; case "menu_pageStyleNoStyle": gPageStyleMenu.disableStyle(); break; case "menu_pageStylePersistentOnly": gPageStyleMenu.switchStyleSheet(null); break; case "repair-text-encoding": BrowserCommands.forceEncodingDetection(); break; case "enterFullScreenItem": case "exitFullScreenItem": BrowserCommands.fullScreen(); break; case "documentDirection-swap": gBrowser.selectedBrowser.sendMessageToActor( "SwitchDocumentDirection", {}, "SwitchDocumentDirection", "roots" ); break; case "sync-tabs-menuitem": gSync.openSyncedTabsPanel(); break; case "hiddenTabsMenu": gTabsPanel.showHiddenTabsPanel(event, "hidden-tabs-menuitem"); break; case "sync-setup": case "sync-enable": 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; case "hiddenUndoCloseWindow": SessionWindowUI.undoCloseWindow(0); break; 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 "menu_HelpPopup_reportPhishingtoolmenu": openUILink(gSafeBrowsing.getReportURL("Phish"), event, { triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}), }); break; case "menu_HelpPopup_reportPhishingErrortoolmenu": gSafeBrowsing.reportFalseDeceptiveSite(); break; case "helpSwitchDevice": openSwitchingDevicesPage(); break; case "aboutName": openAboutDialog(); break; case "helpPolicySupport": openTrustedLinkIn(Services.policies.getSupportMenu().URL.href, "tab"); break; case "menu_setAsDefault": if (AppConstants.platform == "macosx") { Glean.browserApplicationmenu.setAsDefault.record(); ShellService.setAsDefault().catch(async _ => {}); } break; } } function handlePopupShowing(event) { switch (event.target.id) { case "menu_FilePopup": gFileMenu.onPopupShowing(event); break; case "menu_newUserContextPopup": createUserContextMenu(event); break; case "menu_EditPopup": updateEditUIVisibility(); break; case "view-menu-popup": ToolbarContextMenu.onViewToolbarsPopupShowing(event); break; case "pageStyleMenuPopup": gPageStyleMenu.fillPopup(event.target); break; case "historyMenuPopup": if (!event.target.parentNode._placesView) { new HistoryMenu(event); } window.AIWindow?.appMenu?.(event, window); break; case "historyUndoPopup": document .getElementById("history-menu") ._placesView.populateUndoSubmenu(); break; case "historyUndoWindowPopup": document .getElementById("history-menu") ._placesView.populateUndoWindowSubmenu(); break; case "bookmarksMenuPopup": BookmarkingUI.onMainMenuPopupShowing(event); if (!event.target.parentNode._placesView) { new PlacesMenu( event, `place:parent=${PlacesUtils.bookmarks.menuGuid}` ); } break; case "bookmarksToolbarFolderPopup": if (!event.target.parentNode._placesView) { new PlacesMenu( event, `place:parent=${PlacesUtils.bookmarks.toolbarGuid}` ); } break; case "otherBookmarksFolderPopup": if (!event.target.parentNode._placesView) { new PlacesMenu( event, `place:parent=${PlacesUtils.bookmarks.unfiledGuid}` ); } break; case "mobileBookmarksFolderPopup": if (!event.target.parentNode._placesView) { new PlacesMenu( event, `place:parent=${PlacesUtils.bookmarks.mobileGuid}` ); } break; case "menu_HelpPopup": buildHelpMenu(); break; case "menu_ProfilesPopup": gProfiles.onPopupShowing(event); break; } } })();Quelle: https://github.com/benzBrake/Fire…ithButton.uc.js
Mfg.
Endor -
-
Danke lenny2.
Mfg.
Endor -
Und auch hiermit profilePath: "C:\\Users\\Old Man\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\ooaxewl1.Reserve-Profil 2",
Das war die Lösung. Habe meinen Profilpfad nun auch ganz angegeben und damit geht es.
Eine Frage noch: Im ersten Backup Ordner erstellt das Script keine Zip Datei, kopiert nur
die Dateien rein.
Im zweiten Backup Ordner wird eine Zip Datei erstellt. Ist das so gewollt?
Vielen Dank.
Mfg.
Endor -
Hallo FuchsFan.
Habe Dein Scripte getestet. Prima Sache. Beide sind gut.
Aber wenn die Profilbezeichnung ein Leerzeichen enthält funktioniert es nicht.
zbs. Firefox 152 dann kommt nur die Meldung :❌ Fehler: Profilordner existiert nicht: C:\Users\xxxx\AppData\Roaming\Mozilla\Firefox\Profiles\Firefox 152
Lässt sich das eventuell noch beheben?
Mfg.
Endor -
-
Hallo FuchsFan!
Mit deiner ersten Version genau das selbe Problem wie vom Mira_Belle
beschrieben. Die obige teste ich noch. Vielen Dank.Ich habe jetzt wie Du geschrieben hast nur diese beiden Absätze entsprechend eingefügt:
JavaScript// Klick außerhalb: Panel schließen document.addEventListener('click', (event) => { if (panel.state === "open" && !panel.contains(event.target) && event.target.id !== id) { panel.hidePopup(); } });und:
JavaScript// ESC-Taste zum Schließen des Wetterfuchs-Panels document.addEventListener('keydown', function(event) { if (event.key === 'Escape' || event.keyCode === 27) { const panel = document.getElementById('wetterfuchs-panel'); if (panel) panel.hidePopup(); } });Funktioniert prima.
Vielen Dank.
Mfg.
Endor -
Mittelklick ins Paneel schließt es, öffnet aber zugleich einen neuen Tab mit Inhalt des Paneels.
-
Ich verwende die aktuelle von Mira_Belle von hier:
BeitragRE: Wetterfuchsbutton Script für userChrome.js
Sorry, ich konnte nicht anders!
Ich finde die Aufteilung so im Skript einfach besser
und Symbole erst zu generieren, bzw. zu laden finde ich auch nicht so dolle.
Also ist DAS dabei herausgekommen:
(Quelltext, 315 Zeilen)
Das Skript funktioniert auch ohne security.allow_unsafe_dangerous_privileged_evil_eval auf true zu setzen.
Betätigen des Buttons mit linkem Doppelklick, Mittelklick und Linksklick öffnet ein Panel (Popup) mit entsprechenden Seiten.
Das Menü, bzw. das Öffnen der entsprechenden Seiten…
Mira_Belle7. Februar 2026 um 17:22 da gibt es nur sowas:
JavaScript
Alles anzeigen// Panel erstellen function createPanel() { let doc = document; let panel = doc.createXULElement('panel'); panel.id = "wetterfuchs-panel"; panel.setAttribute('noautohide', "false"); panel.setAttribute('type', "arrow"); panel.setAttribute('position', "after_end"); panel.addEventListener('popuphiding', () => { clearPanel(); }); panel.addEventListener('mousedown', event => { if (event.button == 1) { openUrlFromPanel(); } });Mfg.
Endor -
Hallo an die Wetterfuchs Front.
Nur eine kurze Frage, wenn ich beim Wetterfuchs ein Fenster öffne
lässt es sich nicht mehr schließen. Ist das bei euch au so.
Muss Firefox neu starten. Egal ob aus Menü oder klick auf Schaltfläche.Mfg.
Endor -
Hallo bege.
Kann ich dir leider auch nicht sagen.
Der Autor hat diese Version, damit funktionieren oben die drei
Schaltflächen im Popupmenü wieder, so hochgeladen.
Ich habe sie nur auf deutsch übersetzt.Quelle: https://u6.getuploader.com/script/
Die Version aus meinem Repo entspricht dieser hier:
ExtensionOptionsMenu330.uc.jses geht um diesen Absatz hier:
Code
Alles anzeigenlet sb = window.userChrome_js?.sb; if (!sb) { sb = Cu.Sandbox(window, { sandboxPrototype: window, sameZoneAs: window, freezeBuiltins: false, }); Cu.evalInSandbox(` Function.prototype.toSource = window.Function.prototype.toSource; Object.defineProperty(Function.prototype, 'toSource', {enumerable : false}) Object.prototype.toSource = window.Object.prototype.toSource; Object.defineProperty(Object.prototype, 'toSource', {enumerable : false}) Array.prototype.toSource = window.Array.prototype.toSource; Object.defineProperty(Array.prototype, 'toSource', {enumerable : false}) `, sb); window.addEventListener('unload', () => { setTimeout(() => { Cu.nukeSandbox(sb); }, 0); }, { once: true }); } this.sb = sb;Vielleicht kann ein Script Kundiger etwas dazu sagen.
Mfg.
Endor -
Da ich in diesem Profil bei keinem Gerät angemeldet bin, ist es nochmals anders.
Aber nun habe ich es hier am laufen.
Mfg.
Endor -
Hat sich erledigt.
Habe beides nun hinbekommen.
Vielen Dank nochmals.
Mfg.
Endor -
Hallo grisu2099 .
Funktioniert soweit prima.
Nur der letzte Eintrag mit Untermenü da tut sich nichts.
An Mobilgerät senden und Untermenü tut sich nichts.
Mfg.
Endor