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

Beiträge von Horstmann

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Horstmann
    • 8. Februar 2026 um 13:46
    Zitat von Sören Hentzschel
    Zitat von Mira_Belle

    So muss jemand, der das Skript noch nicht nutzt, sich erst einen Wolf suchen, um es ausprobieren zu können.

    Wenn neuere und davon abweichende Varianten von jemand anderem im Umlauf sind, sollten die eigentlich in einem separaten Thema behandelt werden.

    Also ein neues Thema für jeden Update oder Modifikation des gleichen Scripts? Kaum sinnvoll. ;)

    Mira hat völlig recht, es ist ein häufiges Problem, dass Leute annehmen ein erwähntes Script/Scriptname/aktuelle Scriptversion sei Allgemeinwissen.

    In den meisten Themen sind diverse Versionen enthalten; wenn hier nach 55 Seiten ausnahmsweise die #1 noch relevant ist, dann kann man das dazuschreiben.
    Generell sollte man immer zu dem erwähnten Code oder Beitrag konkret Bezug nehmen.

  • Eigene Zusatzleisten

    • Horstmann
    • 6. Februar 2026 um 17:59

    Nach einem leisen Update V18 in #207, hier ein offizieller(er), Version 19.

    Der Button lässt sich jetzt aus den Toolbars und dem Overflowmenü entfernen, ohne das Script zu zerschiessen; die Position lässt sich auch via Button im Overflowmenü ändern, der Code ist stramm gerafft, wenn auch nicht viel kürzer wegen der neuen Features, und eine Unmenge Kleinigkeiten.

    Wie zuvor, Funktionen und Usereinstellungen sind generell gleich geblieben (Parameter teils anders ausgeführt), Icons auch.

    Ein Bug ist hartnäckig: wenn man den Button mit Aus Symbolleiste entfernen rauswirft, und dann direkt per Anpassenfenster zurückbewegt, funktioniert der Rechtsklick/das Kontextmenü auf dem Button erst in einem neuen Fenster bzw. nach Neustart wieder. :/
    Hilfe herzlich willkommen! :)

    Edit: Bug in Version 19b erledigt.

    Aber den Button sonst sauber entfernen zu können, und eine Menge Code damit zu sparen, könnte das Update wert sein.

    Version 19b:

    JavaScript
    // Firefox Javascript, Additional toolbar
    // Choice of vertical left, right, and horizontal bottom, top position
    // Button to turn toolbar On/Off
    // Switch toolbar position via right-click/contextmenu, only available on this button and this toolbar
    // Preferences added by this script: userchrome.new_toolbar.position, userchrome.new_toolbar.enabled, see about:config
    
    // Use filename starting with 00 for custom button functions !! =>
    // 00_extra_toolbars_V19b.uc.js
    
    // Based on:
    // Aris: https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/addonbar_vertical.uc.js
    // Latest versions and icons =>
    // Forum topic: https://www.camp-firefox.de/forum/thema/139927-eigene-zusatzleisten
    // Kudos to Aris, Mitleser and Mira_Belle
    
    // ATTENTION: Some system buttons can still be moved to additional/custom toolbars, but they will have no function.
    // There is a patch by @BrokenHeart: https://www.camp-firefox.de/forum/thema/138875-fix-toolbar-buttons-reagieren-nicht-mehr-ab-ff-134/
    // Different patch by Aris re. the issue included in this script, experimental
    
    // Changes: Position change works in overflow menu, button can be removed w/o breaking script, code optimizations, adjustments
    
    // Version V19b
    
    (function() {
    
        if (location.href !== 'chrome://browser/content/browser.xhtml')
            return;
    
    // User settings
    // After script changes, restart with Clear StartUp Cache => about:support
    
       // Icons
            // false = use Firefox Icon, true = Custom Icon
            let custom_tb_icon  = false;       // On/Off Button
            let custom_tb_icon_sw  = false;    // Position switch button
    
            // Custom icon files
            let Icon_tb = 'toolbar_4.svg';           // On/Off Button
            let Icon_sw = 'toolbar_switch_4.svg';    // Position switch menuitem
    
            // Firefox icons, or absolute file path if custom_tb_icon/ custom_tb_icon_sw = false
            let Icon_tb_Fx = 'chrome://browser/skin/sidebars-right.svg';      // On/Off Button
            let Icon_sw_Fx = 'chrome://global/skin/icons/arrow-right.svg';    // Position switch menuitem
    
            // Custom Icons expected in profile-name/chrome/icons folder ("icons" folder needs to be created)
            // Get path to profile folder
            let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
            // Path to icon folder named "icons" inside profile folder
            let IconPath = '/chrome/icons/';
    
       // Custom background color: false = Off ; true = On (overwrites themes)
            let new_tb_color = false;
            // background color if true
            let new_tb_bg_color = 'hsla(200, 45%, 87%, 1)';
    
       // Border width
            let new_tb_border_width = '1px';
       // Border color
            //let new_tb_border_color = 'red';                                              // Fixed color
            //let new_tb_border_color = 'var(--sidebar-border-color)';                      // Firefox default
            let new_tb_border_color = 'color-mix(in srgb, currentColor 30%, transparent)';  // Custom self-adjusting color
    
    // Size of toolbar and buttons changes, must be px values, all settings are related ==>
    
            // Change button sizes via padding, 8px default, changes toolbar size as well
            let new_tb_btn_size = '6px';
    
            // Width vertical toolbar / height horizontal toolbar, increased by this value on both sides
            // Increases distance of buttons to edges, 0px => toolbar size = button size + border
            let new_tb_size = '1px';
    
            // Distance between buttons, 2px default, doesn't change toolbar size
            let new_tb_distance = '5px';
    
    // Expert mode ===>>>
    // Saving changes, initial states ==>
    
       // true = save states for toolbar On/Off and position on quitting Firefox, false = don't save (prefs deleted)
            // 2x restart required once after change, to make the the option stick
            let new_tb_save = true;
    
       // Initial state toolbar visibility: true = On, false = Off ; only for new_tb_save = false (not saved)
            let new_tb_off = true;
       // Position initial state: right, left, bottom, top ; only for new_tb_save = false (not saved)
            let new_tb_loc = "right";
    
       // Extra: false = Button switches toolbar On/Off / changes position for all open windows ; true = only active window
            let new_tb_uno = false;       // On/Off Button
            let new_tb_uno_sw = false;    // Position button
    
    // Possible problem solutions, if required, experimental ==>
    
       // Fix #1 for themes with low/ tiling background images, true / false, best to only use one of both
            let theme_fix = false;
            // Fix #2, overwrites Fix #1
            let theme_fix_2 = false;
    
       // Adjustments for Restore 'Space & Separator' items script for Firefox 102+ by Aris, true / false
            // https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/space_and_separator_restorer.uc.js
            let separator_fix = true;
    
    // End of user settings
    
        // Icons stuff
        let ImagePath = ProfilePath + IconPath + Icon_tb;
        if (!custom_tb_icon) {
           ImagePath = Icon_tb_Fx;
           }
        let ImagePathSW = ProfilePath + IconPath + Icon_sw;
        if (!custom_tb_icon_sw) {
           ImagePathSW = Icon_sw_Fx;
           }
    
        // Enable .svg icons properties
        if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
        	Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
        }
    
    // Toolbar
        const pref_new_toolbar_state = "userchrome.new_toolbar.enabled";
    
        let ntb_box = document.createXULElement('toolbox');
        ntb_box.id = 'toolbox_new';
        ntb_box.setAttribute('orient','horizontal');
    
        let ntb = document.createXULElement('toolbar');
        ntb.id = 'new_toolbar';
        ntb.setAttribute('customizable', true);
        ntb.setAttribute("class","toolbar-primary chromeclass-toolbar browser-toolbar customization-target");
        ntb.setAttribute('mode', 'icons');
        ntb.setAttribute('context', 'toolbar-context-menu');
        ntb.setAttribute('label', 'New Toolbar');
        ntb.setAttribute('orient', 'vertical');
        ntb.setAttribute("accesskey","");
    
        ntb_box.appendChild(ntb);
        document.getElementById('browser').parentNode.appendChild(ntb_box);
    
        CustomizableUI.registerArea('new_toolbar', {legacy: true});
        CustomizableUI.registerToolbarNode(ntb);
    
        // Get dimensions for customizing mode
        let observer_custom = new MutationObserver(function(mutations) {
          for (let mutation of mutations) {
            try {
              const customContainer = document.getElementById('customization-container');
              if (!customContainer) return;
              const rect = customContainer.getBoundingClientRect();
              document.getElementById('toolbox_new').style.setProperty('--height_newbar_c', rect.top + 'px');
            } catch (e) { }
          }
        });
        observer_custom.observe(document.querySelector('#main-window'), {
          attributes: true,
          attributeFilter: ['customizing'],
        });
    
        // Get dimensions for regular windows
        let navbar_size = document.getElementById("browser");
        let observer = new ResizeObserver(() => {
        let rect = navbar_size.getBoundingClientRect();
        document.getElementById('toolbox_new').style.setProperty('--height_newbar', rect.height + 'px');
        document.getElementById('toolbox_new').style.setProperty('--height_newbar_top', rect.top + 'px');
        });
        observer.observe(navbar_size);
    
        // Get status of customizing mode
        const customizeObserver = new MutationObserver(mutations => {
          for (let m of mutations) {
            if (m.attributeName === "customizing") {
              if (!document.documentElement.hasAttribute("customizing")) {
                els = getEls();
                applyPosition(getPositionPref());
              }
            }
          }
        });
        customizeObserver.observe(document.documentElement, {
          attributes: true,
          attributeFilter: ["customizing"],
        });
    
    // On/Off button
        try {
            CustomizableUI.createWidget({
              id: 'NewToolbar_button',
              defaultArea: CustomizableUI.AREA_NAVBAR,
              tooltiptext: 'Toolbar On',
              label: 'Toggle New Toolbar',
              onCreated: (this_button) => {
                 this_button.setAttribute('closemenu', 'none');
                 this_button.setAttribute('context', 'toolbar-context-menu');
                 this_button.style.MozContextProperties = 'fill, stroke, fill-opacity, stroke-opacity';
                 this_button.style.listStyleImage = 'url("' + ImagePath + '")';
                 this_button.style.minWidth = 'fit-content';
              }
            });
        } catch(e) { }
    
      (function add_button() {
        let btn_exists = document.getElementById("NewToolbar_button");
        if (btn_exists) {
    
        // Button function
        NewToolbar_button.addEventListener('click', event => {
            if (event.button === 0 ) {
              if (!new_tb_uno) {
                tb_toggle();
              }
              else {
                tb_toggle_uno();
              };
              if (NewToolbar_button.classList.contains("off_mode")) {
                 NewToolbar_button.setAttribute("tooltiptext", "Toolbar Off");
                }
              else {
                NewToolbar_button.setAttribute("tooltiptext", "Toolbar On");
              };
            }
        });
    
        const elsOff = [new_toolbar, browser, NewToolbar_button];
    
        function tb_toggle() {
           for (let win of Services.wm.getEnumerator("navigator:browser")) {
             const toolbar = win.document.getElementById("new_toolbar");
             const browserArea = win.document.getElementById("browser");
             let button = win.document.getElementById("NewToolbar_button");
             [toolbar, browserArea, button].forEach(el => el.classList.toggle("off_mode"));
             const ntb_visible = !toolbar.classList.contains("off_mode");
             Services.prefs.setBoolPref(pref_new_toolbar_state, ntb_visible);
           }
        }
    
        function tb_toggle_uno() {
           elsOff.forEach(el => el.classList.toggle("off_mode"));
           const ntb_visible = !new_toolbar.classList.contains("off_mode");
           Services.prefs.setBoolPref(pref_new_toolbar_state, ntb_visible);
        }
    
        let toolbarEnabled = true;
        try {
            toolbarEnabled = Services.prefs.getBoolPref(pref_new_toolbar_state);
        } catch(e) {
                Services.prefs.setBoolPref(pref_new_toolbar_state, new_tb_off);
                toolbarEnabled = new_tb_off;
               }
        if (!toolbarEnabled) {
            elsOff.forEach(el => el.classList.add("off_mode"));
            NewToolbar_button.setAttribute("tooltiptext", "Toolbar Off");
        }
    
        } else {
          setTimeout(add_button, 100);
        }
      })();
    
    // Position switch via context menu
        // Saved state
        const pref_position = "userchrome.new_toolbar.position";
    
        function getPositionPref() {
            try {
                return Services.prefs.getCharPref(pref_position);
            } catch (e) {
                return new_tb_loc;  // Initial state
            }
        }
        function setPositionPref(value) {
            Services.prefs.setCharPref(pref_position, value);
        }
    
        // Toolbars menuitem
        let menuitem_sw = document.createXULElement("menuitem");
        menuitem_sw.setAttribute('id', 'NewToolbar_position_Con');
        menuitem_sw.setAttribute('closemenu', 'none');
        menuitem_sw.setAttribute('label', 'Toolbar Position');
        menuitem_sw.style.setProperty('-moz-context-properties', 'fill, stroke, fill-opacity, stroke-opacity');
        menuitem_sw.classList.add('menuitem-iconic');
    
        let menuseparator_sw = document.createXULElement("menuseparator");
        menuseparator_sw.setAttribute('id', 'sw_separator');
    
        let toolbarMenu = document.getElementById('toolbar-context-menu');
        toolbarMenu.insertBefore(menuitem_sw, toolbarMenu.firstChild);
        toolbarMenu.insertBefore(menuseparator_sw, menuitem_sw.nextSibling);
    
        // Overflow menuitem
        let menuitem_sw_Clone = menuitem_sw.cloneNode(true);
        menuitem_sw_Clone.classList.add('NewToolbar_position_Con_Over');
        let menuseparator_sw_Clone = menuseparator_sw.cloneNode(true);
    
        let overflowMenu = document.getElementById("customizationPanelItemContextMenu");
        overflowMenu.insertBefore(menuitem_sw_Clone, overflowMenu.firstChild);
        overflowMenu.insertBefore(menuseparator_sw_Clone, menuitem_sw_Clone.nextSibling);
    
        let Menuitem_sw_over = document.querySelector(".NewToolbar_position_Con_Over");
    
        // Apply functions
        if (toolbarMenu) {
          toolbarMenu.addEventListener("popupshowing", trigger_limit);
          NewToolbar_position_Con.addEventListener('click', ntb_toggle);
        }
        if (overflowMenu) {
          overflowMenu.addEventListener("popupshowing", trigger_limit);
          Menuitem_sw_over.addEventListener('click', ntb_toggle);
        }
    
        // Context menuitem only visible on this button and toolbar
        function trigger_limit() {
          let trigger = toolbarMenu.triggerNode || overflowMenu.triggerNode;
          let isntbButton = trigger && trigger.id === "NewToolbar_button";
          let isInsideNewToolbar = false;
          if (trigger) {
            let toolbar = trigger.closest("#new_toolbar");
            isInsideNewToolbar = !!toolbar;
            // Minimize clutter in toolbar menu
            const tb_buttons = trigger.closest(
             "#NewToolbar_button, #wrapper-NewToolbar_button, toolbarbutton, toolbarpaletteitem, toolbaritem, .toolbarbutton-1"
            );
            if(toolbar && !tb_buttons){
               toolbarMenu.classList.add("newtb-context");
            }
            else {
               toolbarMenu.classList.remove("newtb-context");
            }
          }
          let visible = isntbButton || isInsideNewToolbar;
          menuitem_sw.hidden = !visible;
          menuseparator_sw.hidden = !visible;
          menuitem_sw_Clone.hidden = !visible;
          menuseparator_sw_Clone.hidden = !visible;
        };
    
    // Functions position
        function getEls(win) {
            const d = win ? win.document : document;
            const toolbox = d.getElementById("toolbox_new");
            const browserArea = d.getElementById("browser");
            const button = d.getElementById("NewToolbar_button");
            const button_con = d.getElementById("NewToolbar_position_Con");
            const button_con_over = d.querySelector(".NewToolbar_position_Con_Over");
            if (!button) {
                return [toolbox, browserArea, button_con, button_con_over];
            }
            return [toolbox, browserArea, button, button_con, button_con_over];
        }
    
        let els = getEls();
    
        // Apply saved state
        function applyPosition(pos) {
            if (pos === "left") {
               els.forEach(el => el.classList.add("left_mode"));
            } else if (pos === "bottom") {
               els.forEach(el => el.classList.add("bottom_mode"));
            } else if (pos === "top") {
               els.forEach(el => el.classList.add("top_mode"));
            } else if (pos === "right") {
               els.forEach(el => el.classList.add("right_mode"));
            }
        }
        let savedPos = getPositionPref();
        applyPosition(savedPos);
    
        function ntb_toggle() {
            if (event.button === 0 || event.button === 2) {
              if (!new_tb_uno_sw) {
                poser();
              }
              else {
                poser_uno();
              };
            }
        };
    
        function poser() {
        for (let win of Services.wm.getEnumerator("navigator:browser")) {
            const els = getEls(win);
            // const toolbox_new = win.document.getElementById("toolbox_new");
            if (toolbox_new.classList.contains("top_mode")) {
                els.forEach(el => el.classList.replace("top_mode", "left_mode"));
                setPositionPref("left");
            } else if (toolbox_new.classList.contains("left_mode")) {
                els.forEach(el => el.classList.replace("left_mode", "bottom_mode"));
                setPositionPref("bottom");
            } else if (toolbox_new.classList.contains("bottom_mode")) {
                els.forEach(el => el.classList.replace("bottom_mode", "right_mode"));
                setPositionPref("right");
            } else if (toolbox_new.classList.contains("right_mode")) {
                els.forEach(el => el.classList.replace("right_mode", "top_mode"));
                setPositionPref("top");
            }
          }
        }
    
        function poser_uno() {
            const els = getEls(window);
            // const toolbox_new = document.getElementById("toolbox_new");
            if (toolbox_new.classList.contains("top_mode")) {
                els.forEach(el => el.classList.replace("top_mode", "left_mode"));
                setPositionPref("left");
            } else if (toolbox_new.classList.contains("left_mode")) {
                els.forEach(el => el.classList.replace("left_mode", "bottom_mode"));
                setPositionPref("bottom");
            } else if (toolbox_new.classList.contains("bottom_mode")) {
                els.forEach(el => el.classList.replace("bottom_mode", "right_mode"));
                setPositionPref("right");
            } else if (toolbox_new.classList.contains("right_mode")) {
                els.forEach(el => el.classList.replace("right_mode", "top_mode"));
                setPositionPref("top");
            }
        }
    
    // Code by Aris => Attach handlers for buttons moved outside #navigator-toolbox
        const customHandlers = {
        	  "unified-extensions-button": (el, e) => gUnifiedExtensions.togglePanel(e),
        	  "fxa-toolbar-menu-button":   (el, e) => gSync.toggleAccountPanel(el, e),
        	  "firefox-view-button":       (el, e) => FirefoxViewHandler.openToolbarMouseEvent(e),
        	  "downloads-button":          (el, e) => DownloadsIndicatorView.onCommand(e),
        	  "pageActionButton":          (el, e) => BrowserPageActions.mainButtonClicked(e),
        	  "alltabs-button":            (el, e) => gTabsPanel.showAllTabsPanel(e, "alltabs-button"),
        	  "library-button":            (el, e) => PanelUI.showSubView("appMenu-libraryView", el, e),
        	  "import-button":             (el, e) => MigrationUtils.showMigrationWizard(window, {
      	  entrypoint: MigrationUtils.MIGRATION_ENTRYPOINTS.BOOKMARKS_TOOLBAR,
      	  }),
        };
    		document.getElementById("new_toolbar").addEventListener("mousedown", (e) => {
    		  const button = e.target.closest("toolbarbutton");
    		  if (button?.id && customHandlers[button.id]) customHandlers[button.id](button, e);
    		});
    
        // Background color
        if (new_tb_color) {
             new_toolbar.classList.add("ntb_bg_color");
           }
    
    // On quitting Firefox: delete Prefs, if new_tb_save = false
        if (!new_tb_save) {
             Services.obs.addObserver(function observer(subject, topic, data) {
                 if (topic === "quit-application-granted") {
                     try {
                         Services.prefs.clearUserPref(pref_new_toolbar_state);
                         Services.prefs.clearUserPref(pref_position);
                     } catch (e) { }
                     Services.obs.removeObserver(observer, "quit-application-granted");
                 }
             }, "quit-application-granted");
          };
    
    let css =`
    
    #main-window {
        --ug-newbar_basewidth: calc(2 * ${new_tb_btn_size} + 16px);  /* Minimalgroesse = Groesse Buttons */
        --ug-newbar_width: calc(var(--ug-newbar_basewidth) + ${new_tb_border_width} + 2 * `+new_tb_size+`);
    }
    
    /*--  Buttons  --*/
    
    /* Button sizes */
    #new_toolbar {
        --toolbarbutton-inner-padding: ${new_tb_btn_size} !important;
        --toolbarbutton-outer-padding: 0px !important;
        /* Start/end toolbar padding */
        --ug-newbar_padding: 8px 8px;
    }
    
    /*  On/Off Button  */
    :root:not([customizing]) #NewToolbar_button.off_mode:not(:hover, :active) .toolbarbutton-icon {
        opacity: 0.4;
    }
    
    /*  Button icon adjusts to Toolbar Position  */
    #NewToolbar_button.left_mode .toolbarbutton-icon,
    #NewToolbar_position_Con.left_mode :is(image, img) {
        transform: rotate(180deg);
    }
    #NewToolbar_button.bottom_mode .toolbarbutton-icon,
    #NewToolbar_position_Con.bottom_mode :is(image, img) {
        transform: rotate(90deg);
    }
    #NewToolbar_button.top_mode .toolbarbutton-icon,
    #NewToolbar_position_Con.top_mode :is(image, img) {
        transform: rotate(-90deg);
    }
    
    /*  Menuitem  */
    #NewToolbar_position_Con :is(image, img) {
        fill: currentColor !important;
        list-style-image: url("${ImagePathSW}");
        content: url("${ImagePathSW}") !important;
    }
    #main-window[customizing] :is(#NewToolbar_position_Con, #sw_separator) {
        display: none !important;
    }
    #toolbar-context-menu.newtb-context > :not(#NewToolbar_position_Con, #sw_separator, .viewCustomizeToolbar) {
        display: none !important;
    }
    
    #unified-extensions-button[hidden] {
        visibility: visible !important;
        display: flex !important;
    }
    
    /*--  Browser adjustments  --*/
    
    #browser.right_mode {
        transition: padding-right 0.25s ease !important;
    }
    #browser.top_mode {
        transition: padding-top 0.25s ease !important;
    }
    #browser.left_mode {
        transition: padding-left 0.25s ease !important;
    }
    #browser.bottom_mode {
        transition: padding-bottom 0.25s ease !important;
    }
    
    #browser:not(.off_mode).right_mode {
        padding-right: var(--ug-newbar_width) !important;
    }
    #browser:not(.off_mode).left_mode {
        padding-left: var(--ug-newbar_width) !important;
    }
    #browser:not(.off_mode).bottom_mode {
        padding-bottom: var(--ug-newbar_width) !important;
    }
    #browser:not(.off_mode).top_mode {
        padding-top: var(--ug-newbar_width) !important;
    }
    
    /*--  Basics / Right  --*/
    
    #toolbox_new {
        position: fixed;
        z-index: 2 !important;
        display: flex;
        width: fit-content;
        top: var(--height_newbar_top);
        right: 0px;
    }
    #new_toolbar {
        display: flex;
        min-width: var(--ug-newbar_width) !important;
        width: var(--ug-newbar_width) !important;
        min-height: var(--ug-newbar_basewidth) !important;
        height: var(--height_newbar) !important;
        align-items: center !important;
        overflow: hidden !important;
        margin-inline: 0px;
        padding-block: var(--ug-newbar_padding);
        padding-inline: 0px;
        border-width: 0px;
        /*justify-content: center !important;*/    /* content position, "center" or "flex-end", optional */
        border-style: solid !important;
        border-color: ${new_tb_border_color} !important;
        border-left-width: ${new_tb_border_width};
        border-right-width: 0px;
    }
    
    #toolbox_new:not(.bottom_mode, .top_mode) #new_toolbar:not([customizing]) {
        max-width: var(--ug-newbar_width) !important;
        transition: width 0.25s ease, max-width 0.25s ease, min-width 0.25s ease, border-left-width 0.125s ease;
    }
    
    #toolbox_new #new_toolbar:not([customizing]).off_mode {
        min-width: 0px !important;
        width: 0px !important;
        max-width: 0px !important;
        min-height: unset !important;
        max-height: unset !important;
        border-width: 0px !important;
        box-shadow: none !important;
    }
    
    #new_toolbar:not([customizing]).off_mode > :is(.toolbarbutton-1, toolbaritem) {
        opacity: 0 !important;
    }
    #new_toolbar > :is(.toolbarbutton-1, toolbaritem),
    #new_toolbar toolbarpaletteitem > :is(.toolbarbutton-1, toolbaritem) {
        margin-block: ${new_tb_distance} !important;
        margin-inline: var(--toolbarbutton-outer-padding) !important;
        opacity: 1 !important;
        transition: opacity 0.125s ease-out;
    }
    
    /*--  Left  --*/
    
    #toolbox_new.left_mode {
        right: unset;
        left: 0px;
    }
    #toolbox_new.left_mode #new_toolbar:not([customizing]) {
        border-left-width: 0px;
        border-right-width: ${new_tb_border_width};
        transition: width 0.25s ease, max-width 0.25s ease, min-width 0.25s ease, border-right-width 0.125s ease;
    }
    
    /*--  Bottom / Top  --*/
    
    #toolbox_new.bottom_mode {
        top: unset;
        bottom: 0px;
    }
    
    #toolbox_new:is(.bottom_mode, .top_mode) #new_toolbar:not([customizing]) {
        flex-direction: row !important;
        min-height: 0px !important;
        height: var(--ug-newbar_width) !important;
        max-height: var(--ug-newbar_width) !important;
        min-width: 0px !important;
        width: 100vw !important;
        padding-block: 0px;
        padding-inline: var(--ug-newbar_padding);
        border-inline-width: 0px;
        border-top-width: ${new_tb_border_width};
        /*justify-content: center !important;*/    /* content position, "center" or "flex-end", optional */
        transition: height 0.25s ease, max-height 0.25s ease, min-height 0.25s ease, border-top-width 0.125s ease !important;
    }
    
    #toolbox_new:where(.bottom_mode, .top_mode) #new_toolbar:not([customizing]).off_mode {
        min-height: 0px !important;
        height: 0px !important;
        max-height: 0px !important;
        max-width: unset !important;
    }
    
    #toolbox_new:where(.bottom_mode, .top_mode) #new_toolbar:not([customizing]) > :is(.toolbarbutton-1, toolbaritem) {
        margin-block: var(--toolbarbutton-outer-padding) !important;
        margin-inline: ${new_tb_distance} !important;
    }
    
    /*--  Top  --*/
    
    #toolbox_new.top_mode #new_toolbar:not([customizing]) {
        border-top-width: 0px;
        border-bottom-width: ${new_tb_border_width};
        transition: height 0.25s ease, max-height 0.25s ease, min-height 0.25s ease, border-bottom-width 0.125s ease !important;
    }
    
    /*--  Fullscreen  --*/
    
    /* Mac / Video Fullscreen only */
    #main-window[inDOMFullscreen]:not([customizing]) #toolbox_new {
        visibility: collapse !important;
    }
    #main-window[inDOMFullscreen]:not([customizing]) #browser {
        padding: 0px !important;
    }
    /* Windows Fullscreen Video + Normal */
    @media (-moz-platform: windows) {
    #main-window[inFullscreen]:not([customizing]) #toolbox_new {
        visibility: collapse !important;
    }
    #main-window[inFullscreen]:not([customizing]) #browser {
        padding: 0px !important;
    }
    }
    
    /*--  customizing  --*/
    
    #main-window[customizing] #toolbox_new {
        top: unset !important;
        bottom: 0px !important;
        right: 0px !important;
        left: unset !important;
    }
    #new_toolbar[customizing] {
        height: calc(100vh - var(--height_newbar_c)) !important;
        width: initial !important;
        transition: none !important;
        border-color: transparent !important;
    }
    #new_toolbar[customizing]::after {
        content:"";
        position: absolute;
        top: 0px;
        right: 0px;
        height: 100%;
        width: calc(100% - ${new_tb_border_width});
        outline: 1px solid ${new_tb_border_color};
        pointer-events: none;
    }
    #main-window:not([customizing]) #new_toolbar[customizing].off_mode {
        min-width: 0px !important;
        width: 0px !important;
        min-height: 0px !important;
        height: 0px !important;
        border-width: 0px !important;
    }
    #customization-container {
        margin-right: var(--ug-newbar_width) !important;
    }
    
    /*--  Background colors  --*/
    
    /* Custom toolbar background color if enabled */
    #new_toolbar.ntb_bg_color {
        background-color: ${new_tb_bg_color} !important;
    }
    
    /*- Background for themes, if background images are tiled, try theme_fix options above -*/
    :root[lwtheme] #new_toolbar:not(.ntb_bg_color) {
        background-color: var(--lwt-accent-color, var(--toolbar-bgcolor)) !important;
    }
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color) {
        background-image: var(--lwt-header-image) !important;
        background-position: right 0px top 0px !important;
    }
    
    /*-  test colors  -*/
    /*
    #new_toolbar image {
        outline: 1px solid green !important;
        outline-offset: -1px !important;
    }
    */
    
     `;
    
    if (theme_fix) {
      css += `
    /*-  Fix #1 for themes with tiled background images  -*/
    
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color) {
        background: var(--lwt-header-image) !important;
        background-repeat: no-repeat !important;
        background-size: cover !important;
        background-position: right 0px top 0px !important;
    }
    :root[lwtheme][lwtheme-image] #toolbox_new:is(.bottom_mode, .top_mode) #new_toolbar:not(.ntb_bg_color) {
        background-size: auto !important;
    }
     `;
    }
    
    if (theme_fix_2) {
      css += `
    /*-  Fix #2b width for themes with tiled background images  -*/
    
    :root[lwtheme][lwtheme-image] #toolbox_new #new_toolbar:not(.ntb_bg_color) {
         background: transparent !important;
    }
    
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color)::before {
        content: "" ;
        position: absolute;
        top: 0px;
        right: 0px;
        min-width: var(--height_newbar) !important;
        width: var(--height_newbar) !important;
        min-height: var(--ug-newbar_width) !important;
        height: var(--ug-newbar_width) !important;
        pointer-events: none;
        z-index: -1 !important;
        background: var(--lwt-header-image) !important;
        background-repeat: no-repeat !important;
        transform: rotate(-90deg) translateX(var(--ug-newbar_width)) !important;
        transform-origin: 100% 100% !important;
    }
    
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color, [customizing])::before {
        transition: height 0.25s ease, max-height 0.25s ease, min-height 0.25s ease, margin-top 0.25s ease;
        margin-top: 0px;
    }
    
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color, [customizing]).off_mode::before {
        min-height: 0px !important;
        height: 0px !important;
        max-height: 0px !important;
        margin-top: var(--ug-newbar_width);
    }
    
    :root[lwtheme][lwtheme-image] #toolbox_new:is(.bottom_mode, .top_mode) #new_toolbar:not(.ntb_bg_color, [customizing])::before {
        transform: scaleX(-1) !important;
        transform-origin: 50% 50% !important;
        min-height: var(--ug-newbar_width) !important;
        height: var(--ug-newbar_width) !important;
        min-width: 0px !important;
        width: 100vw !important;
        transition: height 0.25s ease, max-height 0.25s ease, min-height 0.25s ease;
        margin-top: unset;
    }
    
    :root[lwtheme][lwtheme-image] #toolbox_new:is(.bottom_mode, .top_mode) #new_toolbar:not(.ntb_bg_color, [customizing]).off_mode::before {
        min-height: 0px !important;
        height: 0px !important;
        max-height: 0px !important;
        margin-top: unset;
    }
    
    :root[lwtheme][lwtheme-image] #new_toolbar:not(.ntb_bg_color)[customizing]::before {
        width: calc(100vh - var(--height_newbar_c)) !important;
    }
    
    #main-window:not([customizing]) #toolbox_new #new_toolbar:not(.ntb_bg_color)[customizing].off_mode::before {
        min-width: 0px !important;
        width: 0px !important;
        min-height: 0px !important;
        max-height: 0px !important;
        height: 0px !important;
        border-width: 0px !important;
        margin-top: unset !important;
    }
     `;
    }
    
    if (separator_fix) {
      css += `
    /* Adjustments for Separator Scripts  */
    
    #new_toolbar toolbarseparator {
        width: calc(var(--ug-newbar_width) - ${new_tb_border_width} - 6px) !important;
        margin: 5px 0px !important;
        border-block-color: hsl(0, 0%, 0%, 0.45) hsl(0, 0%, 100%, 0.55) !important;
        transition: width 0.125s ease !important;
    }
    #new_toolbar :is(toolbarspacer, toolbarspring, toolbarseparator) {
        min-width: 0px !important;
    }
    #new_toolbar:not([customizing]).off_mode toolbarseparator {
        width: 0px !important;
    }
    #toolbox_new:where(.bottom_mode, .top_mode) #new_toolbar:not([customizing]) toolbarseparator {
        transform: rotate(-90deg) !important;
        margin: 0px !important;
    }
    #new_toolbar[customizing] toolbarseparator {
        margin-block: 16px !important;
    }
     `;
    }
    
    const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
    })();
    Alles anzeigen

    Icons: icons.zip

  • Vollbild-Fenstermodus

    • Horstmann
    • 1. Februar 2026 um 19:27
    Zitat von Smirre

    Wie dem auch sei, ich bedanke mich für das Verweisen auf die CSS Repository, und schlage mich dann vielleicht doch noch in betriebssystemseitige Versuche, meinem Ziel zumindest näher zu kommen. Ich markiere den Thread damit als "erledigt". Vielleicht schaut ja doch noch mal ein Code-Zauberer rein und findet etwas heraus, aber für den Moment bin ich so ausreichend bedient.

    Dann viel Glück, mir fällt leider nicht viel mehr dazu ein. :/

    Im übrigen, danke für deine ausführlichen Rückmeldungen auf Vorschläge und Kommentare, das ist immer eine Belohnung! :)

  • Vollbild-Fenstermodus

    • Horstmann
    • 1. Februar 2026 um 16:53
    Zitat von Smirre

    Ich verstehe nicht ganz worauf du hinaus willst. Ein maximiertes Fenster ist nicht Vollbildmodus, und Vollbildmodus ist in Größe eben nicht veränderbar, darum geht es mir ja gerade

    Was möchtest du damit sagen, dass es nicht "Fx relevant" sei?

    KDE Mover-Sizer ist übrigens eine kleine Anwendung, die das Verhalten des Fenstermanagers von KDE-basierten Linuxsystemen emulieren soll.

    Es mag für dich eine Frage der Semantik sein, aber Vollbildmodus bedeutet Vollbild - die designierte Bildschirmfläche wird komplett benutzt durch das aktive Programm.

    Was du bisher beschreibst, ist das teilweise Verhalten von Programmfenstern, bzw. dem Erscheinen von Kontrollflächen, ähnlich dem im Vollbildmodus, auch ausserhalb vom Vollbildmodus.

    Das erfolgt in jedem Programm teils abhängig vom OS, teils davon wie das Programm die Fenstermodi im OS integriert.

    Wenn deine "kleine" Anwendung das irgendwann mal umfassend genug manipulieren konnte, und jetzt nicht mehr, dann liegt das an deiner "kleinen" App, die das nicht mehr schafft.

    Es gibt schon ewig diese autohide Codes für Fx, um eben das erwähnte Verhalten zu simulieren.
    Einen davon hast du ja schon, und wenn du mehr über das Ändern von Fensterrändern via Fx Codes wissen willst, dann kann dir jede Internetsuche dazu alles über Zeitverschwendung erzählen. ;)

  • Vollbild-Fenstermodus

    • Horstmann
    • 1. Februar 2026 um 14:53
    Zitat von Smirre

    Interesse daran, ob es nicht doch noch jemandem mit dem "Vollbild-Als-Fenster"-Modus gelingt, habe ich aber nach wie vor. Ich kann mir irgendwie nicht vorstellen, dass das so schwer umzusetzen ist.

    "Vollbild-Als-Fenster"-Modus gibt es schon, das wäre das maximierte Fenster, das den Bildschirm bedeckt, aber in der Grösse veränderbar bleibt. :/

    Um Symbolleisten aus- und einzublenden, gibt es zusätzlich die verlinkten CSS hover Lösungen, wenn man sowas mag; das kann man auch via JS (nicht Tampermonkey) etwas anders machen, mit einem Button oder Kontextmenü Eintrag.

    Falls es nur um Kleinigkeiten wie Fensterräder geht, die sind eben OS abhängig.
    Auch OS abhängig sind Provisorien die Fx bereitstellt, um das Vollbild Verhalten etwas anzupassen; bei mir am Mac ist es anders als in Windows.
    Kommen noch externe Apps dazu, wie etwa KDE Mover-Sizer - was immer das ist - dann ist das nicht mehr Fx relevant, egal ob Fx in irgendeiner Form davon betroffen ist.

    Im übrigen ist alles schwer umzusetzen, zumindest sobald man in jeden einzelnen Anwendungsfall einsteigen will, um eine kohärente Lösung zu präsentieren. ;)

  • Lesezeichen Symbolleiste mehrzeilig

    • Horstmann
    • 31. Januar 2026 um 17:36
    Zitat von gefunden008

    Ich habe 144 einzelne Lesezeichen, wenn ich auf 150 Stück erhöhe und den Browser dann schließe und wieder öffne, werden die letzten 6 nicht direkt angezeigt nur wenn ich dann über Lesezeichen verwalten gehe.

    Mal kurz getestet, ich habe 148 geschafft! ;)

    Siehe auch alte Diskussionen hier oder hier, könnte wohl damit zu tun haben.

  • Vollbild-Fenstermodus

    • Horstmann
    • 31. Januar 2026 um 13:12
    Zitat von Smirre

    Mit dem CSS bin ich tatsächlich gut zufrieden. Das größenveränderbare Vollbildfenster ist zwar eine elegantere Lösung, aber mit dem Stylesheet bin ich 90% am Ziel.

    Interesse habe ich aber immer noch an der Möglichkeit, dass es sich doch noch mit dem Vollbildmodus-Im-Fenster ausfuchsen lässt, auch wenn es durchaus unwahrscheinlich ist, dass sich jemand damit beschäftigen wird.

    Verstehe ich das richtig, dass es dir jetzt vor allem noch um "Vollbild"-Videos in einem nicht Vollbild Fenster geht? :/
    Fx unterscheidet hier zwischen verschiedenen Zuständen, s. etwa diesen Test:

    CSS
    #main-window[inFullscreen]:not([inDOMFullscreen]) #browser {
        border: 6px solid red !important;
    }

    inDOMFullscreen sollte dann für Videoplayer im Vollbildmodus sein, inFullscreen für alle Vollbildmodi gelten, und mit dem CSS sollte es eine rote Border geben im generellen Vollbildmodus, aber nicht wenn ein Video im Vollbildmodus ist.
    Nur als Beispiel für eine Differenzierung.

    Ist aber kompliziert. ;)

  • Vollbild-Fenstermodus

    • Horstmann
    • 30. Januar 2026 um 20:03
    Zitat von Smirre

    Ich bin bereit für eine Lösung auch zu zahlen.

    150000000 ! :rolleyes:

    Oder hier.

  • Hovern über einen Link produziert keine Einblendung

    • Horstmann
    • 19. Januar 2026 um 14:31
    Zitat von Boersenfeger

    Treffer versenkt!

    Prima. :)

  • Hovern über einen Link produziert keine Einblendung

    • Horstmann
    • 19. Januar 2026 um 11:59
    Zitat von Boersenfeger

    Eben mit -6 und -12px getestet. Dann verschwindet die Einblendung hinter die Statusleiste.

    Im Nightly funktioniert hier der alte Code auch nicht mehr.:/
    Probier mal den Code komplett, Änderungen sind markiert:

    JavaScript
    /* Statusleiste für Firefox */
    
    // Test Nightly 149
    
    // https://www.camp-firefox.de/forum/viewtopic.php?p=1052187&sid=d4e33b574226439c26dfb45629b71369#p1052187
    // entwickelt von aborix
    
    (function() {
    	    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    
      let css =`
    
        #new-toolbar {
            height: 28px;
            direction: rtl;
            -moz-window-dragging: no-drag;
            border-top: 1px solid black !important;
            background-color: rgba(0,0,0,0) !important;
            color: black !important;
        }
    
        #statuspanel {
            position: fixed !important;  /* neu */
            bottom: -28px !important;    /* neu */
            left: 0 !important;
            /*height: 24px !important;*/   /* neu */
            max-width: 75% !important;
            transition: none !important;
        }
    
        #statuspanel-label{
            background: transparent !important;  /* neu */
            border: none !important;
            border-top: 3px solid #7598ff !important;    /* neu */
            font: 17px Arial Rounded MT Bold !important;
            font-weight: normal !important;
            color: black !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.AUTHOR_SHEET);
    
      var tb = document.createXULElement('toolbar');
      tb.id = 'new-toolbar';
      tb.setAttribute('customizable', true);
      tb.setAttribute('mode', 'icons');
      tb.setAttribute("context","toolbar-context-menu");
      var vbox  = document.createXULElement('vbox');
    
       // document.getElementById('navigator-toolbox').parentNode.insertBefore(
       // vbox, document.getElementById('browser-bottombox'));
       // neu
    	 document.getElementById('browser').parentNode.appendChild(vbox);
    
      vbox.style.backgroundColor = '#ffe4c4';
      vbox.appendChild(tb);
    
      CustomizableUI.registerArea('new-toolbar', {legacy: true});
      CustomizableUI.registerToolbarNode(tb);
    
    })();
    Alles anzeigen
  • translate.google.com Nicht verwendete Sprachen ausblenden

    • Horstmann
    • 13. Januar 2026 um 18:01
    Zitat von lenny2

    funktioniert er nicht mehr, ebenso wenig wie andere Stile aus diesem Thema. Bitte stellen Sie die Funktionsfähigkeit wieder her.

    CSS
    /* userContent.css */
    /* https://www.camp-firefox.de/forum/thema/137330/?postID=1241028#post1241028 */
    @-moz-document domain(translate.google.com) {
    [data-language-code] {
        display: none !important;
     }
    /* List of required translation languages */
    [data-language-code="auto"],
    [data-language-code="de"],
    [data-language-code="en"] {
        display: block !important;
     }
    .qSb8Pe {
        min-height: 45px !important;
        max-width: 70px !important;
     }
    /* Color for round button and chevron on hover */
    [aria-label="More source languages"]:hover,
    [aria-label="More target languages"]:hover {
        background: red !important;
        color: white !important;
        border-radius: 90px;
     }
    }
    Alles anzeigen

    Erstmal würde ich versuchen, das hier zu löschen bzw. weg zu kommentieren:

    CSS
    .qSb8Pe {
        min-height: 45px !important;
        max-width: 70px !important;
     }

    Unabhängig davon, border-radius: 90px; könnte besser mit border-radius: 50%; klappen.

  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 13. Januar 2026 um 14:29
    Zitat von Mira_Belle

    Wozu ist das Menü "userChrome.js Scripte" mit der id="userChromejs_script_options_Menu" da?
    Bei mir ist es leer, es wird absolut nichts angezeigt!

    Fehlen dir evtl. ein paar Dateien in deiner Installation, oder werden die nicht geladen, zB die gelistet nach var userChromejsScriptOptionsMenu = {... ? :/

    Zeigt die Konsole Fehler in der Richtung?
    Endor weiss bestimmt mehr dazu. :)

  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 12. Januar 2026 um 19:03
    Zitat von Mira_Belle

    Nun funktioniert wirklich alles, so wie ich mir das vorgestellt habe.

    Prima! :)
    Weiss nicht ob das hilft, aber einer meiner Favoriten ist classlist.add.

  • Benutzerdefinierte Farbe per Hover zuweisen

    • Horstmann
    • 12. Januar 2026 um 10:00

    Immer ein Vergnügen! :)

  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 11. Januar 2026 um 21:27

    Endor hat evtl. eine Lösung schon gefunden, #userChromejs_options könnte die ID sein, die menuitems haben teilweise nochmal eigene IDs wie es scheint. Ansonsten kann man IDs auch zuweisen, wie es der Code ja schon macht an vielen Stellen; :nth-child ist mEn nicht ganz optimal.

    Benutzt du eigentlich die Browserwerkzeuge? ;)

  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 11. Januar 2026 um 18:33
    Zitat von Mira_Belle

    Hat sich mit dem Code von 2002Andreas aus #36 erledigt,
    wenn er auf das Loadermenü eingegrenzt werden könnte.

    Ist ja ein freies Land, und du kannst jeden Code benutzen den du willst.;)
    Ich hab aber das letzte Mal danach gefragt dass jemand einen Code postet, oder Screenshots, oder die Browserwerkzeuge benutzt, oder in dem eigenen Code nach sowas wie ID schaut. 8)

  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 11. Januar 2026 um 14:46
    Zitat von Mira_Belle

    Man kann in dem Menü Scripte aktivieren bzw. deaktivieren, so weit, so gut.
    Nun mein Problem, wenn ein Skript aktiviert ist, ist ein Häkchen davor,
    ist es deaktiviert, nicht, aber der Eintrag springt dann ein Stück nach rechts!
    Blöd, sieht einfach nicht gut aus.
    Schöner wäre es, wenn anstatt des Häkchens einfach ein anderes Symbol angezeigt werden würde.
    Nur ich bekomme das einfach nicht gebacken.

    Dieses Verhalten ist auch bei anderen Menüeinträgen, wo aktiviert/deaktiviert werden kann, zu beobachten.

    Also auch bei Menüeinträgen, die nichts mit diesem Script zu tun haben?
    Dann müsstest du vermutlich das betreffende CSS für Menüs unter die Lupe nehmen, dazu gibt's ja schon eine Menge an Diskussionen. :/

    Oder poste mal dein komplettes Script, hier seh ich das nicht.

  • Benutzerdefinierte Farbe per Hover zuweisen

    • Horstmann
    • 9. Januar 2026 um 14:35
    Zitat von lenny2

    Wunderbar!

    Prima! :)

    Ich glaube das Gleiche gilt übrigens auch für .urlbarView-row-inner vs .urlbarView-row , die Hintergrundfarbe liegt eigentlich auf Letzterem, seit Fx 111 oder so, aber ich kann mich da täuschen. :/

  • Benutzerdefinierte Farbe per Hover zuweisen

    • Horstmann
    • 9. Januar 2026 um 11:48
    Zitat von lenny2

    Ich möchte auch die Hervorhebungsfarbe ändern, wenn ich eine Zeile mit den Pfeiltasten auswähle; sie ist standardmäßig noch grau.

    Wenn ich das recht verstehe, liegt die Hintergrundfarbe auf .contentSearchSuggestionRow (?) :/

    Evtl. sowas; ungetestet, color nur falls du das ändern willst:

    CSS
    .contentSearchSuggestionRow:hover {
        background-color: orange !important;
        /*color: white !important;*/
    }
    
    .contentSearchSuggestionRow.selected:not(:hover) {
        background-color: blue !important;
        /*color: white !important;*/
    }
  • JavaScriptLoader, läuft bei mir nicht!

    • Horstmann
    • 8. Januar 2026 um 18:23

    In deinem 2ten Script macht add_downloads_button_listener nix, aber davon abgesehen funktionieren beide hier mit dem "normalen" Forenloader .

    Es ist nicht sehr wahrscheinlich, dass jemand den Scriptloader zum Testen für dich umbaut, daher würde ich nochmal vorschlagen, zumindest an der Quelle nachzuforschen, auch wenn du für Englisch einen Übersetzer brauchst. :/

Unterstütze uns!

Jährlich (2026)

32,8 %

32,8% (213,31 von 650 EUR)

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