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. FuchsFan

Beiträge von FuchsFan

  • Script für Datums- & Zeitanzeige

    • FuchsFan
    • 16. September 2026 um 16:29
    Zitat von V_B

    C:\Program Files\Mozilla Firefox
    userChromeJS.js und config.js

    Wenn tatsächlich der Ordner so userChromeJS.js heißt, dann kann es nicht funktionieren. So ist es richtig userChromeJS.

  • close-tabs-left.uc.js funktioniert seit Firefox 154 nicht mehr

    • FuchsFan
    • 9. September 2026 um 17:36
    Zitat von lionsson

    Ich kann nur sagen, dass besagte Einträge (Linke, Rechte Tabs schließen,...) im Tabs-Kontextmenue anwesend, und haben funktioniert.

    Sehr schön, aber mit deinem Script funktionieren sie auch wenn du das machst RE: close-tabs-left.uc.js funktioniert seit Firefox 154 nicht mehr

  • close-tabs-left.uc.js funktioniert seit Firefox 154 nicht mehr

    • FuchsFan
    • 9. September 2026 um 17:18

    2002Andreas

    Gerade festgestellt, sein Script funktioniert doch, es muss nur dieses // in Zeile 14 entfernt werden.

  • close-tabs-left.uc.js funktioniert seit Firefox 154 nicht mehr

    • FuchsFan
    • 9. September 2026 um 17:04
    Zitat von lionsson

    Mithin: was meinst Du mit "...es hat keine Funktion mehr"?

    Weil es nicht mehr funktioniert, es macht nicht das was es soll. Ich habe es mal überarbeiten lassen, kannst ja mal testen.

    JavaScript
    (function() {
    if (location.href !== 'chrome://browser/content/browser.xhtml') {
    return;
    }
    
    const tabContextMenu = document.getElementById('tabContextMenu');
    const refItem = document.getElementById('context_undoCloseTab');
    
    if (!tabContextMenu || !refItem) {
    return;
    }
    
    const menuitem = document.createXULElement('menuitem');
    menuitem.id = 'context_closeLeftTabs';
    menuitem.setAttribute('label', 'Linke Tabs schließen');
    
    const closeTabsToEnd = document.getElementById('context_closeTabsToTheEnd');
    const closeTabsToStart = document.getElementById('context_closeTabsToTheStart');
    const closeOtherTabs = document.getElementById('context_closeOtherTabs');
    const closeTabOptions = document.getElementById('context_closeTabOptions');
    
    if (closeTabsToEnd) {
    tabContextMenu.insertBefore(closeTabsToEnd, refItem);
    }
    
    if (closeTabsToStart) {
    tabContextMenu.insertBefore(closeTabsToStart, refItem);
    }
    
    if (closeOtherTabs) {
    tabContextMenu.insertBefore(closeOtherTabs, refItem);
    }
    
    if (closeTabOptions) {
    closeTabOptions.remove();
    }
    
    menuitem.addEventListener('command', function() {
    const contextTab = TabContextMenu.contextTab;
    
    if (!contextTab) {
      return;
    }
    
    const position = contextTab._tPos;
    
    for (let i = position - 1; i >= 0; i--) {
      gBrowser.removeTab(gBrowser.tabs[i], { animate: true });
    }
    
    
    });
    
    tabContextMenu.insertBefore(menuitem, refItem);
    })();
    Alles anzeigen
  • close-tabs-left.uc.js funktioniert seit Firefox 154 nicht mehr

    • FuchsFan
    • 9. September 2026 um 16:15
    Zitat von lionsson

    Was muss ich ändern, damit das überflüssige „Mehrere Tabs schließen“ mit Pfeil nicht mehr angezeigt wird?

    Nichts im Script, trage das in die userChrome.css ein.

    CSS
    #context_closeTabOptions {
    	display: none !important;
    }	
  • Aufruf von Shadow Dateien / Skript-Vorstellung: ShadowCSSLoader.uc.js

    • FuchsFan
    • 9. September 2026 um 11:01
    Zitat von .DeJaVu

    Andreas hat zB kürzlich, wie auch bisher stets, die Quelle für seine KI erwähnt, zuletzt ChatGPT. "Erstellt mit KI" ist ja nett, aber welche KI? Mit welcher Frage? Auch wenn Sören kürzlich schrieb, dass eine KI mit derselben Frage unterschiedliche Ergebnisse produzieren kann, halte ich es nur für richtig, es auch so im Detail zu beschreiben. Persönlich ziehe ich Mistral vor, aber das muss jeder für sich selbst entscheiden. Nix für ungut. Bilder lass ich mal so sein, egal.

    .DeJaVu

    Jetzt erkläre mir doch mal bitte, was wolltest du jetzt mit dem Angriff auf mich erreichen. Gefällt dir etwas nicht, dann sage es!
    Wenn es auch nicht zu der Thematik gehört, so werde ich dich zum Hergang dieses Vorgangs aufklären. 2002Andreas und ich haben über die Möglichkeit nachgedacht, mit KI ein Skript zu erstellen, dass genau mit den üblichen @import-Regeln arbeitet, z.B. @import "css/Dialog_über Firefox.css"; (in #1 erklärt warum). Stunden daran versucht, aber ergebnislos. Durch Zufall kam dann der Vorschlag einer KI, ein Skript in dieser Fassung zu verwenden, und das war natürlich noch eine Verbesserung des Vorhabens. Und nur weil es dir nicht gefällt sollen wir darauf verzichten? Endor hat sich mal sinngemäß über KI geäußert, ihm wäre es total egal, Hauptsache das Script funktioniert wieder. Und ich täusche mich wohl nicht, viele andere werden auch so denken. Und das sollten wir alle im Hinterkopf behalten:

    Bilder

    • Chat-Bots.png
      • 93,75 kB
      • 856 × 734
  • Aufruf von Shadow Dateien / Skript-Vorstellung: ShadowCSSLoader.uc.js

    • FuchsFan
    • 8. September 2026 um 08:57
    Zitat von .DeJaVu

    Dennoch bleibt es unhöflich, meine Bitte mit ein paar Worten oder Bildern abzutun.

    Noch einmal zu deiner Beruhigung, es bedarf dazu keiner bildlichen Darstellung. Was möchtest du sehen, den Inhalt des CSSShadow-Ordners, oder dass sich das "alte" Skript sich nicht mehr im Ordner chrome befindet?

    Zitat von .DeJaVu

    Und Andreas hat Funktionalität schon verneint.

    Da liegst du aber vollkommen daneben. Was hat er verneint? Ein Beweis für mich, dass du alles hierzu nur oberflächlich betrachtet hast.

    Zitat von .DeJaVu

    KI halte ich nicht pauschal für falsch, aber es sollten mehr Informationen und Quellen angegeben werden als früher.

    Was hast du davon, wenn ich dir die bekannten hier aufzähle, kannst du dann besser schlafen? Bisher war nur der Einsatz einer KI anzugeben, wenn ich es richtig in Erinnerung habe.

  • Aufruf von Shadow Dateien / Skript-Vorstellung: ShadowCSSLoader.uc.js

    • FuchsFan
    • 7. September 2026 um 21:35
    Zitat von .DeJaVu

    Ich würde mich über ein Bild, bzw einen Bildvergleich, freuen, was genau sich verändert hat.

    Dazu bedarf es keiner Bilder, und wie wer welchen Code einsetzt, steht auch nicht zur Debatte. Was sich geändert hat steht in der Einleitung. Für dich mache ich aber mal eine Ausnahme. Mit dem neuen Skript entfällt der Einsatz des bisherigen Skriptes userChromeShadow.uc.js, außerdem braucht es keine userChromeShadow.css mehr. Das vorgestellte Skript lädt automatisch alle Dateien aus dem Ordner CSSShadow. Und noch einmal der Hinweis, es ist nur für die Leute gedacht, die bisher ihre Dateien über @import-Befehle geladen haben.


    Zitat von Mira_Belle

    Ich war da etwas vorschnell und habe mich geirrt!

    Aber Mira, irren ist menschlich.:)

  • Aufruf von Shadow Dateien / Skript-Vorstellung: ShadowCSSLoader.uc.js

    • FuchsFan
    • 7. September 2026 um 17:23

    Sorry, das stimmt so nicht ganz!

    Denn, so wie du es jetzt darstellst, hat es hier nie funktioniert. Frage mal den Moderator 2002Andreas, was der dazu sagt.

  • Aufruf von Shadow Dateien / Skript-Vorstellung: ShadowCSSLoader.uc.js

    • FuchsFan
    • 7. September 2026 um 17:06

    Um Shadow-Dateien nutzen zu können gibt es schon länger diese Möglichkeit, ShadowRoot: Neue Aufruf-Methode für CSS-Regeln. Eine genaue Beschreibung was Shadow Dateien sind, bzw. wann man sie benötigt wird dort ausführlich beschrieben. Kurz gefasst, dafür muss erst ein userChromeShadow.uc.js Skript installiert werden. Weiterhin eine Datei userChromeShadow.css im Ordner chrome erstellt werden, wo der aufzurufende Code eingetragen wird. Einige Nutzer arbeiten mit @import-Regeln, die für jeden einzelnen CSS-Code in die userChromeShadow.css eingetragen werden müssen, und einem Ordner mit dem Namen CSSShadow im Ordner chrome, wo die CSS-Dateien abgelegt sind. Der Nachteil hierbei besteht darin, dass immer der vollständige lange Pfad zur CSS-Datei vorgegeben werden muss, was dann so aussieht @import url("file:///B:/Firefox Test/Nightly1/Profilordner/chrome/CSSShadow/Hamburger Menü Umrandung ohne border-radius.css");.

    Mit diesem neuen Skript, erstellt mit Hilfe einer KI, kann man auf die Datei userChromeShadow.css ganz verzichten. Das neue Skript erkennt jede Datei im Ordner CSSShadow. Somit erspart man sich nicht nur eine Datei, sondern auch die jeweilige @import Regel.

    Wer es testen mag:


    JavaScript
    // ==UserScript==
    // @name                ShadowCSSLoader.uc.js
    // @namespace           ShadowCssLoader
    // @include             main
    // @charset             UTF-8
    // @version             1.0.02.09.2026
    // @description         Aus dem Ordner chrome/CSSShadow werden alle enthaltenen CSS-Dateien automatisch geladen
    //                      eine userChromeShadow.css ist nicht mehr erforderlich
    // @author              erstellt mit KI
    // @compatibility       Firefox Version 155+
    // ==/UserScript==
    
    (async function() {
    
        if (location != "chrome://browser/content/browser.xhtml") {
            return;
        }
    
        try {
            const folder = PathUtils.join(
                PathUtils.profileDir,
                "chrome",
                "CSSShadow"
            );
    
            console.log("CSSShadow-Ordner:");
            console.log(folder);
    
            const files = await IOUtils.getChildren(folder);
    
            console.log(
                "Einträge im CSSShadow-Ordner: " + files.length
            );
    
            let cssIn = "";
            let cssCount = 0;
    
            for (const file of files) {
    
                const name = PathUtils.filename(file);
    
                console.log("Gefunden: " + name);
    
                if (!/\.css$/i.test(name)) {
                    continue;
                }
    
                const text = await IOUtils.readUTF8(file);
    
                cssIn +=
                    "\n\n/* BEGINN " + name + " */\n" +
                    text +
                    "\n/* ENDE " + name + " */\n";
    
                cssCount++;
    
                console.log(
                    "CSS gelesen: " + name +
                    " (" + text.length + " Zeichen)"
                );
            }
    
            console.log(
                "CSS-Dateien gelesen: " + cssCount
            );
    
            console.log(
                "Gesamtzeichen: " + cssIn.length
            );
    
            if (cssCount === 0) {
                throw new Error(
                    "Keine CSS-Dateien gefunden in:\n" + folder
                );
            }
    
            const sss = Cc[
                "@mozilla.org/content/style-sheet-service;1"
            ].getService(
                Ci.nsIStyleSheetService
            );
    
            const uri = makeURI(
                "data:text/css;charset=UTF-8," +
                encodeURIComponent(cssIn)
            );
    
            sss.loadAndRegisterSheet(
                uri,
                sss.AUTHOR_SHEET
            );
    
            console.log(
                "UserChromeShadow: Stylesheet registriert"
            );
    
        } catch (e) {
    
            console.error(
                "UserChromeShadow-Fehler: " +
                e.name + ": " + e.message
            );
        }
    
    })();
    Alles anzeigen
  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:55
    Zitat von Dharkness

    Das passt, Dankeschön.

    Sehr schön, gern geschehen.

  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:51

    Dharkness

    Teste bitte:

    JavaScript
    (function() {
    if (!window.gBrowser) return;
    
    let previousTab = gBrowser.selectedTab;
    
    gBrowser.tabContainer.addEventListener("TabSelect", e => {
    previousTab = e.detail?.previousTab;
    });
    
    const menu = document.getElementById("tabContextMenu");
    if (!menu) return;
    
    const separator = document.createXULElement("menuseparator");
    const item = document.createXULElement("menuitem");
    
    item.id = "context_jumpToPreviousTab";
    item.setAttribute("label", "Zum letzten aktiven Tab springen");
    
    item.addEventListener("command", () => {
    if (previousTab?.isConnected)
    gBrowser.selectedTab = previousTab;
    });
    
    menu.append(separator, item);
    
    menu.addEventListener("popupshowing", () => {
    item.disabled = !previousTab?.isConnected || previousTab === gBrowser.selectedTab;
    });
    })();
    Alles anzeigen
  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:46
    Zitat von Dharkness

    Was soll denn der quatsch, geht es auch nur mit dem Kontextmenü?

    Das wäre auch zu machen, und sinnvoller, da gebe ich dir vollkommen recht. Ich melde mich wieder.:)

  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:42
    Zitat von Dharkness

    Und welche ist die erste Funktion, wenn es auch im Kontextmenü quasi eine zweite Funktion ablegt?

    Tut mir leid, Ralf, aber den Sinn dahinter konnte ich auch noch nicht ergründen. Mit Kontext ist klar, aber wenn du dann mehrere Tabs geöffnet hast, dann beobachte mal was passiert, wenn du die Tabs links anklickst.

  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:37
    Zitat von captain chaos

    Danke, aber mein Problem ist, dass keine Skripte mehr funktionieren.

    Wenn du der Meinung bist alles richtig eingefügt zu haben, dann rufe mal about:support über die Adressleiste auf, dann rechts Start-Cache löschen auswählen. Firefox neu starten, d.h. beenden und wieder starten.

  • Zum letzten aktiven Tab wechseln

    • FuchsFan
    • 6. September 2026 um 18:05

    Ansonsten kannst du mal das folgende Script testen, legt auch im Kontext-Menü der Tabs ganz unten einen Eintrag dafür an.

    JavaScript
    (function() {
      if (!window.gBrowser)
        return;
    
      let previousTab = gBrowser.selectedTab;
      let selectedTab = gBrowser.selectedTab;
      let selectPreviousTab = false;
    
      function getTab(node) {
        return node?.closest?.("tab");
      }
    
      function selectPrevious() {
        if (previousTab && previousTab.isConnected)
          gBrowser.selectedTab = previousTab;
      }
    
      gBrowser.tabContainer.addEventListener("TabSelect", function(event) {
        previousTab = event.detail?.previousTab ?? selectedTab;
        selectedTab = event.target;
        selectPreviousTab = false;
      });
    
      gBrowser.tabContainer.addEventListener("mousedown", function(event) {
        selectPreviousTab =
          event.button === 0 &&
          getTab(event.target) === selectedTab;
      });
    
      gBrowser.tabContainer.addEventListener("click", function() {
        if (!selectPreviousTab)
          return;
    
        selectPreviousTab = false;
        selectPrevious();
      });
    
      function addContextMenuItem() {
        const menu = document.getElementById("tabContextMenu");
    
        if (!menu || document.getElementById("context_jumpToPreviousTab"))
          return;
    
        const separator = document.createXULElement("menuseparator");
        separator.id = "context_jumpToPreviousTabSeparator";
    
        const item = document.createXULElement("menuitem");
        item.id = "context_jumpToPreviousTab";
        item.setAttribute("label", "Zum letzten aktiven Tab springen");
    
        item.addEventListener("command", selectPrevious);
    
        menu.appendChild(separator);
        menu.appendChild(item);
    
        menu.addEventListener("popupshowing", function() {
          item.disabled =
            !previousTab ||
            !previousTab.isConnected ||
            previousTab === gBrowser.selectedTab;
        });
      }
    
      addContextMenuItem();
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • FuchsFan
    • 3. September 2026 um 14:22

    Das Script für Addon-Suche funktionierte auch nicht mehr richtig. Das ist jetzt die Abfolge, in 155 bis 157 getestet:

    Das ist jetzt der Ablauf:

    Firefox startet (kein Restart).
    Die installierten Erweiterungen werden im Hintergrund geprüft.
    Es wird nichts automatisch installiert (automatische Updates deaktiviert).
    Gibt es keine Updates, passiert gar nichts.
    Gibt es Updates, wird genau ein about:addons-Tab geöffnet.
    Firefox landet direkt bei „Verfügbare Updates“.
    Rechts werden die tatsächlich verfügbaren Updates angezeigt.
    Über die Installation wird selbst entschieden.

    JavaScript
    // addonUpdateNotifier.uc.js
    // Firefox 154+
    // Version 03.09.2026
    // Sucht beim Firefox-Start nach Updates für installierte
    // Erweiterungen. Es wird NICHT automatisch installiert.
    // Automatisches Update muss deaktiviert sein
    // Bei Updates wird direkt "Verfügbare Updates" geöffnet.
    
    (async function() {
    
        if (location.href !== "chrome://browser/content/browser.xhtml")
            return;
    
    
        const { AddonManager } =
            ChromeUtils.importESModule(
                "resource://gre/modules/AddonManager.sys.mjs"
            );
    
    
        async function checkForUpdates() {
    
            let foundUpdate = false;
    
            let addons =
                await AddonManager.getAddonsByTypes([
                    "extension"
                ]);
    
    
            for (let addon of addons) {
    
                if (
                    !(addon.permissions &
                      AddonManager.PERM_CAN_UPGRADE)
                ) {
                    continue;
                }
    
    
                await new Promise(resolve => {
    
                    addon.findUpdates({
    
                        onUpdateAvailable(
                            aAddon,
                            install
                        ) {
    
                            foundUpdate = true;
    
                        },
    
    
                        onNoUpdateAvailable() {
                        },
    
    
                        onUpdateFinished() {
    
                            resolve();
    
                        }
    
                    },
                    AddonManager.UPDATE_WHEN_USER_REQUESTED);
    
                });
            }
    
    
            /*
             * Keine Updates:
             * nichts machen.
             */
    
            if (!foundUpdate)
                return;
    
    
            /*
             * ========================================================
             * UPDATE GEFUNDEN
             * ========================================================
             */
    
            let win =
                Services.wm.getMostRecentWindow(
                    "navigator:browser"
                );
    
            if (!win)
                return;
    
    
            /*
             * Einen neuen about:addons-Tab öffnen.
             */
    
            let tab =
                win.gBrowser.addTrustedTab(
                    "about:addons"
                );
    
            win.gBrowser.selectedTab =
                tab;
    
            win.focus();
    
    
            /*
             * ========================================================
             * ABOUT:ADDONS WARTEN
             * ========================================================
             */
    
            let browser =
                tab.linkedBrowser;
    
    
            browser.addEventListener(
                "DOMContentLoaded",
                function listener() {
    
                    browser.removeEventListener(
                        "DOMContentLoaded",
                        listener
                    );
    
                    /*
                     * Jetzt NICHT about:addons#updates laden!
                     *
                     * Stattdessen den internen ViewController
                     * von about:addons benutzen.
                     */
    
                    selectUpdatesView(
                        browser
                    );
    
                },
                {
                    once: true
                }
            );
        }
    
    
        /*
         * ============================================================
         * UPDATE-VIEW AUSWÄHLEN
         * ============================================================
         */
    
        function selectUpdatesView(browser) {
    
            let tries = 0;
    
    
            let timer =
                setInterval(() => {
    
                    tries++;
    
    
                    try {
    
                        let win =
                            browser.contentWindow;
    
                        let doc =
                            browser.contentDocument;
    
    
                        if (!win || !doc) {
    
                            if (tries > 200)
                                clearInterval(timer);
    
                            return;
                        }
    
    
                        /*
                         * ------------------------------------------------
                         * Firefox about:addons ViewController
                         * ------------------------------------------------
                         */
    
                        let controller =
                            win.gViewController;
    
    
                        if (!controller) {
    
                            if (tries > 200) {
    
                                clearInterval(timer);
    
                                console.error(
                                    "[AddonUpdateNotifier] " +
                                    "gViewController nicht gefunden."
                                );
                            }
    
                            return;
                        }
    
    
                        /*
                         * ------------------------------------------------
                         * Direkt die Firefox-View aufrufen.
                         * ------------------------------------------------
                         *
                         * Die gewünschte View lautet:
                         *
                         *     addons://updates/available
                         *
                         * Das ist die View-ID der Kategorie
                         * "Verfügbare Updates".
                         */
    
    
                        clearInterval(timer);
    
    
                        /*
                         * Je nach Firefox-Version ist die Methode
                         * loadView() bzw. loadViewInternal() verfügbar.
                         */
    
                        if (
                            typeof controller.loadView ===
                            "function"
                        ) {
    
                            controller.loadView(
                                "addons://updates/available"
                            );
    
                            return;
                        }
    
    
                        if (
                            typeof controller.loadViewInternal ===
                            "function"
                        ) {
    
                            controller.loadViewInternal(
                                "addons://updates/available"
                            );
    
                            return;
                        }
    
    
                        /*
                         * ------------------------------------------------
                         * Fallback:
                         *
                         * Kategorie-Button über seine View-ID anklicken.
                         * ------------------------------------------------
                         */
    
                        let button =
                            doc.querySelector(
                                '[viewid="addons://updates/available"]'
                            );
    
    
                        if (!button) {
    
                            button =
                                doc.querySelector(
                                    '[name="available-updates"]'
                                );
                        }
    
    
                        if (button) {
    
                            button.click();
    
                            return;
                        }
    
    
                        console.error(
                            "[AddonUpdateNotifier] " +
                            "Keine Möglichkeit gefunden, " +
                            "'Verfügbare Updates' zu öffnen."
                        );
    
    
                    } catch (e) {
    
                        console.error(
                            "[AddonUpdateNotifier]",
                            e
                        );
    
    
                        if (tries > 200)
                            clearInterval(timer);
                    }
    
                }, 100);
        }
    
    
        /*
         * ============================================================
         * START
         * ============================================================
         */
    
        setTimeout(
            checkForUpdates,
            2000
        );
    
    })();
    Alles anzeigen
  • Skripte funktionieren nicht mehr seit Update auf FF 155

    • FuchsFan
    • 2. September 2026 um 15:27
    Zitat von baramax

    Diese ist jetzt trotz der neuen Dateien immer noch weg.

    Dann stelle mal bitte das Script hier rein, dann sehen wir weiter.

  • Skript-Vorstellung: ExtensionOptionsMenu.uc.js

    • FuchsFan
    • 2. September 2026 um 15:24
    Zitat von Mira_Belle

    Habe kein Interesse mehr an der Fortsetzung!

    Bist du jetzt beleidigt, hätte doch gern deine Version getestet.:/

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • FuchsFan
    • 2. September 2026 um 09:45

    Bob___

    Habe etwas Geduld, ich schaue es mir an, melde mich dann zurück.

    Übrigens, hast du dich damit befasst (ab 155): https://github.com/Endor8/userChr…0155/userChrome

Unterstütze uns!

Jährlich (2026)

71,6 %

71,6% (554,79 von 775 EUR)

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