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

  • Freiwillige gesucht für Tests an einem JavaScript

    • Horstmann
    • 17. August 2023 um 08:16
    Zitat von geldhuegel

    Hat mir doch keine Ruhe gelassen. Neues Profil funktioniert und darin arbeiten alle 4 Testversionen einwandfrei !!!

    Ich werde also mal Skripte und Codes nacheinander hinzufügen und schauen wann ein Fehler auftritt.

    Nur die Meldung

    "Unerwarteter Wert matrix(Infinity NaN NaN Infinity 0 0) beim Parsen des Attributs transform. default-browser-red.svg"

    ist in der Konsole weiter vorhanden.

    Fortschritt, super! :thumbup:

    Wie hast du denn die Scripts in den neuen Profile ans Laufen gebracht, wo lag das Problem?

    Die Icon Meldung hab ich auch, vermutlich ist der .svg Code nicht ganz kompatibel/korrekt, funktioniert aber ja.

  • Freiwillige gesucht für Tests an einem JavaScript

    • Horstmann
    • 16. August 2023 um 12:53
    Zitat von Mira_Belle

    Ist schon etwas merkwürdig.

    Ist halt auch schwierig an einem Problem zu arbeiten, das man nicht reprodizieren kann.

    Eine Frage in die Runde wäre noch, ob wir alle die gleichen Scriptlader benutzen, wie bei mir der aktuelle von Endor, hier auch der hiesige Beitrag von Andreas dazu.

  • Freiwillige gesucht für Tests an einem JavaScript

    • Horstmann
    • 15. August 2023 um 18:22
    Zitat von Mira_Belle

    Horstmann

    Bitte mache Du doch noch einmal den Elchtest! :D

    Das Ding mit Fenster schliesen und so.

    Elchtest ausgeführt, Fx115esr auf Mac - Resultat wie zu erwarten! ;)

    #1 und #2 funktionieren hier nur im ersten geöffneten Fenster ohne Elch, #1a und #2a funktionieren auch im Elchtest.

    (So geht der Elchtest, beschrieben hier und hier).

    Keine Konsolenerrors für des Script an sich, nur der CustomizableUI: unable to normalize widget error in allen Varianten, wobei eben #1a/2a trotzdem immer funktionieren.

    Auch ein Konsolenerror zu deinem Icon: Unerwarteter Wert matrix(Infinity NaN NaN Infinity 0 0) beim Parsen des Attributs transform. default-browser-red.svg, aber das Icon ist immer sichtbar.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 14. August 2023 um 22:23
    Zitat von Mira_Belle

    Ok, auch bei mir wird auch bei anderen Javascripts bei Zeilen mit folgendem Inhalt eine Meldung aus geworfen.

    document.getElementById('profileschange-button').addEventListener( "click", onClick );

    Jedoch funktionieren alle Skripts weiter hin ganz normal :!:

    Nur aus Neugierde, gibt es auch eine Fehlermeldung zu document.getElementById...etc, wenn der komplette CSS Teil raus ist? :/

    Etwa mit sowas wie meiner groben Testversion?

    Die Einbindung scheint sich ja minütlich zu ändern. ;)

    Ich kann hier aber mit keiner Scriptversion eine Fehlermeldung provozieren, seit dem Zusatz von document.getElementById('profileschange-button').addEventListener( "click", onClick );.

    Allerdings bin ich auf meinem alten Mac jetzt auf 115esr festgenagelt, damit bin ich wohl für eine Weile raus aus dem Thema... ;(

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 13. August 2023 um 14:28
    Zitat von geldhuegel

    Der Button ist vorhanden aber keine Reaktion bei Klick.

    Hier meine Datei:

    CSS
    // JavaScript Document
    // QuickProfilesChangesButton.uc.js
    // Source code https://www.camp-firefox.de/forum/thema/136664/?postID=1233148#post1233148
    // Mit wichtiger Änderung von Horstmann!
    // Version 1.10 from August 12, 2023
    (function() {
       if (location.href !== 'chrome://browser/content/browser.xhtml') return;
       try {
          CustomizableUI.createWidget({
             id: 'profileschange-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {        
                let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var props = {
                   id: 'profileschange-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Profil zusätzlich starten',
                   accesskey: '', // Wer möchte kann hier z.B. 'C' eintragen, dann kann per "Alt + C" das Skript ausgeführt werden
                   tooltiptext: 'Profil NeuTest starten',
                };            
                for (var p in props)
                   toolbaritem.setAttribute(p, props[p]);            
                return toolbaritem;
             }    
          });
       } catch(e) { };
       
       let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
       let ButtonIcon = "ProfilZusatz1.png"; // Name & Dateiendung des anzuzeigenden Symbols!
       let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);      
       let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
           #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
           #profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
             width: 30px !important;
             height: 30px !important;
             }
          `), null, null);
       sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
       document.getElementById('profileschange-button').addEventListener( "click", onClick );
       function onClick(event) {
          if (event.button != 0){
             return;
          }
          let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          let arguments = ["-no-remote", "-P", "NeuTest", "-foreground"]; // Profil wird ausgewählt Hier "XXX" den gewünschten Profilnamen eintragen
    //      let arguments = ["-no-remote", "-P"]; // Wer lieber den Profilmanager aufrufen möchte,nutzt diese Zeile!
          file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
    //      file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
          let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(file);    
          process.run(false, arguments, arguments.length); // Profil wird bestätigt
       }    
    })();
    Alles anzeigen

    Ich habe mal dein Script kopiert, und nur den Profilnamen und Iconnamen geändert, sowie den Dateipfad auf Mac umgestellt.

    Funktioniert prima .... :/

    In deinem Konsoleneintrag steht auch nichts über Profil_V110.uc.js.

    Ältere Versionen vom Script hast du entfernt?

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 13. August 2023 um 11:29
    Zitat von geldhuegel

    Wieder mal ich:

    Ich habe bisher die Version aus Beitrag 145 verwendet und war, wie schon geschrieben, sehr zufrieden. Seitdem habe ich nur die Beiträge verfolgt.

    Jetzt habe ich mal die neuesten Versionen übernommen und muss folgendes sagen:

    Version 1.08 und 1.10 funktionieren bei mir nicht. Button ist da, aber bei Klick keine Reaktion.

    Version 1.07 aus Beitrag #230 funktioniert nur einmal. Danach immer die Fehlermeldung.

    Keine Ahnung warum das bei mir so ist. Die erforderlichen Personalisierungen habe ich durchgeführt und dreimal geprüft. Das Verhalten ist bei derzeit zwei Profilen der Fall.

    Alles anzeigen

    Könntest du den problematische Scriptcode mal einstellen?

    Evtl. hast du was übersehen; es gibt ja eine neue Zeile mit anzupassen, Zeile 41 in Mira's Script 1.10.

    Und was für eine Fehlermeldung meinst du, in der Konsole oder ein Popup Fenster wie das hier?


    Zitat von Mira_Belle
    Zitat von Horstmann
    ...

    :|

    Du musst Dich doch nicht rechtfertigen!

    Ist alles i.O.

    Nah, wollte es nur nochmal zusätzlich erklären, auf Windows hat man das Problem wahrscheinlich nur sehr selten.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 12. August 2023 um 11:09
    Zitat von Mira_Belle

    UND, dieser "kleine Bug", den Horstmann beschrieben hatte, tritt also auch unter Windows auf.

    Ist jetzt nicht so tragisch, finde ich, denn gedacht war das ja nur, um in einem Testprofil Änderungen auszutesten,

    und dann dieses auch wieder zu schließen.

    ABER, Menschen sind halt auch im Verhalten so ganz anders, und jeder macht, was er will. :D

    Deshalb habe ich den Code von Horstmann übernommen.

    IdR habe ich auch nur Tabs im Spiel in einem Fenster, und der Button ist auch hier nur für ein bestimmtes Testprofil.

    Ausserdem schliesse ich unbenutzte Programme normalerweise.

    Aber wegen dem beschriebenen Macverhalten kommt es immer mal wieder vor, dass ich das Fenster vom Startprofil schliesse, einfach damit es aus dem Weg ist (gerade auch wenn ich an einem Testprofil rumbastle), während aber das Startprofil/Startinstanz fensterlos im Hintergrund weiterläuft.

    Auf dem Mac ist das ein nicht ungewöhnliches Prozedere, deshalb kam das Problem bei mir recht regelmässig vor.

    Hat ewig gedauert das zu kapieren, bis ich mich an den anderen Beitrag erinnert habe, wo es ein verwandtes Problem gab... :|

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Horstmann
    • 12. August 2023 um 09:34
    Zitat von Mitleser

    @Horstmann

    Ich habe mich erneut mit dem Thema beschäftigt und bin zu folgendem Ergebnis gekommen:

    JavaScript
    (function () {
        let css = `
    tooltip[label*=" "],
    #tabbrowser-tab-tooltip,
    .places-tooltip {
        display: none !important;
    }
    #remoteBrowserTooltip{
        display: flex !important;
    }
        `;
        let sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        let uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    })();
    Alles anzeigen

    Vielen Dank, das scheint im Prinzip hier zu funktionieren! :thumbup: :)

    Allerdings musste ich 2 Änderungen machen, weil einige Tooltips nicht angesprochen waren, und einige Objekte im Überhangsmenü und Erweiterungsmenü ein gestörtes Hoververhalten gezeigt haben (Menü hat sich bei Hover geschlossen).

    Also tooltip dazugenommen, tooltip[label*=" "] in tooltip[label] geändert.

    Das Überhangsmenü und Erweiterungsmenü scheint beim ersten Öffnen aber immer noch etwas Probleme zu machen, schliessen sich bei Hover. :/

    Sieht jetzt als Test so aus, mit deinem variierten Code und etwas von Mira_Belle (Dankeschön :) )

    JavaScript
    // browser.chrome.toolbar_tips  true
    // Test2a
    
    (function () {
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);      
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    
            tooltip, 
            tooltip[label],
            #tabbrowser-tab-tooltip, 
            .places-tooltip {
                display: none !important;
            }
    
            #remoteBrowserTooltip {
                display: flex !important;
            }
    
        `), null, null);
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    })();
    Alles anzeigen
  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 12. August 2023 um 08:15
    Zitat von Mira_Belle

    Soweit ich das jetzt in meinen kurzen Tests festgestellt habe, scheint es zu funktionieren.

    Wenn das auch von anderen bestätigt wird, werde ich Horstmann im Skript "verewigen"!

    Und bitte auch darum, das Skript dann auch so zu verwenden, inkl. Quellenangabe.

    Funktioniert hier auf dem Mac, Danke! :) :thumbup:

    Ich glaube dass ich einen Mac habe macht das kleine Problem für mich auch offensichtlicher.

    Ist es in Windows nicht so, dass durch das Schliessen aller Programm/Instanzfenster dieses Programm/die Instanz beendet wird?

    Auf meinem Mac ist das bei den meisten Programmen nicht der Fall, die müssen aktiv beendet werden auch wenn keine Fenster vorhanden sind.

    Wenn ich also mit Firefox Instanz A das Profil bzw Instanz B öffne, kann ich das/alle Fenster in Instanz A schliessen, die Instanz A läuft aber weiter im Hintergund, das Icon von Instanz A bleibt auch aktiv im Dock (Win Taskleiste?).

    Bei 3 offenen Profilen/Instanzen, aber alle deren Fenster geschlossen, sieht das Dock dann so aus:

    Ich kenne Windows kaum, weiss nicht wie das dort funktioniert...

    In meinem Fall kann ich also jede Instanz mit Anklicken direkt aufrufen, und es öffnet sich ein Fenster - was aber eben nicht das selbe Fenster ist, das beim ersten Start der jeweiligen Instanz geöffnet wurde --> Button hatte nicht mehr funktioniert.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 11. August 2023 um 22:38

    Ich glaube ich kann mein Problem mit dem Originalscript von Mira_Belle jetzt reproduzieren:

    Korrigierte Beschreibung :

    Firefox öffnen, das Programm öffnet mit einem Browser Fenster (Fenster A).

    Script Button funktioniert; jetzt neues Fenster B öffnen, dann das Fenster A - das erste beim Start geöffnete Fenster - schliessen.

    Script Button funktioniert nicht mehr in Fenster B oder anderen Fenstern, sobald Fenster A geschlossen wurde.

    Solange das erste beim Programmstart geöffnete Browserfenster offen ist, funktioniert das Script, auch in danach geöffneten zusätzlichen Fenstern, aber nur dann.

    Würde mich interessieren, ob jemand anders das auch beobachten kann.

    Was mich vage an das hier erinnert hat, und an die Lösung die mal wieder BrokenHeart geliefert hatte. :)

    Das Problem könnte diese Zeile im Script sein: toolbaritem.onclick = event => onClick(event); . :/

    Was nach ersten Tests hier zu klappen scheint ist sowas, Icon Name und Profilname etc. anzupassen, wesentliche Änderungen in Zeilen 14 und 31 (- 36):

    Nur Test, offizielle Versionen von Mira !

    JavaScript
    //Test Fix
    
    (function() {
       if (location.href !== 'chrome://browser/content/browser.xhtml') return;
       try {
          CustomizableUI.createWidget({
             id: 'Leerprofil_button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {        
                let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                let buttonIcon = "LettersL-1.png"; 
                //toolbaritem.onclick = event => onClick(event);
                let props = {
                   id: 'Leerprofil_button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   overflows: 'true',
                   label: 'Leerprofil',
                   tooltiptext: 'Leerprofil Button',
                   style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonIcon) +'");',
                };            
                for (var p in props)
                   toolbaritem.setAttribute(p, props[p]);            
                return toolbaritem;
             }    
          });
       } catch(e) { };
    
       document.getElementById('Leerprofil_button').addEventListener( "click", onClick );
    
       function onClick(event) {
          if (event.button == 0) 
          {      
    
          let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
    
          let arguments = ["-foreground", "-no-remote", "-P", "Leerprofil"];           // Profil Name
    
          file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); // Pfad Windows
    
          //file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox-bin"); // Pfad Mac
    
          let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(file);    
          process.run(false, arguments, arguments.length); // Profil wird bestätigt
       }    
    }
    })();
    Alles anzeigen
  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 10. August 2023 um 16:19
    Zitat von Sören Hentzschel

    Kam denn eine der Meldungen neu dazu, als es aufhörte zu funktionieren, oder waren die Fehler alle schon vorher da? Die einzige Stelle im Code, welche unable to normalize widget loggen kann, ist nämlich die Stelle, an der createWidget() aufgerufen wird. Und das sollte ja nur ein einziges Mal pro Script sein. Insofern würde es mich wundern, wenn das direkt mit deinem Problem zusammenhängt.

    Der letzte Fehler ist aber wieder der aus dem anderen Script. Bekommst du den gleichen Fehler denn auch vom anderen Script, während das dieses Script hier noch funktioniert?

    Soweit ich es beobachten kann - wie gesagt kann ich das Problem leider nicht willentlich verursachen - taucht der Error unable to normalize widget nur mit diesem Script auf.

    Die anderen Fehlermeldungen/Warnungen sind immer in der Konsole.

    Und das gerade gesehen.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 10. August 2023 um 15:47
    Zitat von Sören Hentzschel

    Gibt es denn Fehler in der Konsole, wenn es nicht mehr klappt?

    Jetzt hat das Script endlich aufgehört zu funktionieren ;) ; hier der Error in der Konsole:

    CustomizableUI: unable to normalize widget hatte ich schon vorher mal in der Konsole gesehen, war mir aber nicht sicher ob es mit dem Script zusammenhängt.

    Wie (nachträglich) erwähnt, der Button ist bei mir im Überhangmenü; andere Scripts die ebenfalls dort sind haben das Problem nicht.

    Nach wie vor kann ich aber das Problem nicht reproduzieren oder provozieren, es scheint zufällig aufzutauchen.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 10. August 2023 um 10:51
    Zitat von Sören Hentzschel

    Der gezeigte Fehler erscheint erst, wenn es nicht mehr geht? Der Fehler kommt aus einem anderen Script. Da ich keine Scripts nutze, weiß ich nicht, ob sich Fehler in einem Script auch auf andere auswirken. Tritt das Problem auch ohne dieses Script auf?

    Das ist tatsächlich ein anderesScript das hier immer einen Error erzeugt, aber funktioniert.

    Ob das einen Einfluss hat kann ich momentan nicht sagen, muss ich mal testen - nur weigert sich jetzt gerade das Profilbuttonscript aufzuhören zu funktionieren... ;)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 10. August 2023 um 09:59
    Zitat von Sören Hentzschel

    Gibt es denn Fehler in der Konsole, wenn es nicht mehr klappt?

    Nichts was ich zuordnen könnte; ich spiele das nochmal durch im Moment, mal schauen ob was Neues auftaucht wenn das Script aufhört zu funktionieren.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 10. August 2023 um 09:45

    Eine kleine Sache habe ich hier noch: idR funktioniert der Button für das zusätzliche Profil mehrfach hintereinander.

    Ich kann das Zusatzprofil starten, Änderungen aller Art im Zusatzprofil vornehmen, mit oder ohne Cache löschen das Zusatzprofil neustarten oder beenden oder mit dem Button im Ursprungsprofil neustarten, etc..

    Und dann irgendwann geht der Button nicht mehr, bis zu einem Neustart vom Ursprungsprofil.

    Ich kann aber absolut nicht nachvollziehen warum, habe alle möglichen Varianten durchprobiert.

    Es ist als ob nach einer bestimmten Zeit das Script abschaltet - was aber keinen Sinn macht, oder? :/

    Hat das sonst noch jemand beobachtet?


    Nachtrag: alle anderen Scripts haben das Problem nicht; und der Button sitzt bei mir im Überhangmenü.

  • Restart-Script ohne Funktion

    • Horstmann
    • 8. August 2023 um 15:27
    Zitat von Dharkness
    Zitat von 2002Andreas

    aber mein Skript funktioniert einwandfrei

    Funktioniert in der Tat ohne Probleme, aber das ↓ verwirrt mich, ist das so korrekt?

    tooltiptext: 'Neustart (mit Rechts 2- und Linksklick 0 wird der userChrome.js-Cache geleert)'

    Ist ja nur falscher Text für den Tooltip; das Script von Andreas sollte mit Links-Klick einen normalen Neustart machen, mit Mittel- und Rechtskilck einen Neustart + Scriptcache löschen.

  • Größere Abstände zwischen den Menüsymbolen und dem Menütext

    • Horstmann
    • 6. August 2023 um 19:42
    Zitat von bananovic

    Ich muß nochmal auf den Thread zurückkommen. Ich habe Firefox auf Version 117.0b3 upgedatet. Jetzt hat sich zwar an den Menüicons nichts geändert, es ist nun aber der Menütext ganz dicht ohne jeden Abstand an die Icons herangerückt. Wie kriegt man da wieder einen Abstand hin?

    Zitat von bananovic

    Ja, zu dem Schluß bin ich auch gekommen. Ich werde es mit Deiner CSS probieren. Dazu muß ich aber andere Icons beschaffen, denn Deine schwarz/weiß-Icons sind nicht mein Ding. Farbige Icons habe ich in der bisher verwendeten MenuIconPlusCSS. Da muß ich nur die richtigen für jeden Menüpunkt finden. Eine Heidenarbeit.

    Wenn der Abstand zwischen einigen Icons und Text das einzige Problem ist, und konstant falsch, kann's doch nicht so schwer sein die Ursache zu finden, im Zweifel mit den Browser Werkzeugen. :/

    Da werden margins/paddings etc. inklusive der verantwortlichen CSS Dateien angezeigt.

    Die Basis von deinem Code scheint kürzlich auch u.a. deswegen up-ge-dated worden zu sein, hast du dir das mal angeschaut?

    Generell würde ich mir so einen komplexen Fremdcode aber auch nicht antun, wie oben erwähnt.

    Entweder eigenes CSS das man versteht - oder vorgefertigtes CSS, die Finger davon weglassen und dann bei Bedarf nach Updates schauen, wenn denn welche kommen. 8)

  • Firefox 115.0.3 für Nutzer veralteter Betriebssysteme veröffentlicht

    • Horstmann
    • 5. August 2023 um 13:26
    Zitat von StandingBill

    Mozilla war da anscheinend etwas voreilig.

    Beim Versuch der Installation von Version 115.1 ESR gibt es eine Fehlermeldung (Installation fehlgeschlagen).

    Die nochmalige Updatesuche endet mit dem Hinweis, dass Firefox aktuell ist.

    Das Problem hatte ich auch, auf einem Mac mit OS 10.13.6, was .

    Das Update war angezeigt in Fx115.02 (in Über Firefox), dann war es plötzlich weg, und Firefox aktuell ; dann kam 115.03, die Updatetaste ist irgendwann wieder aufgetaucht, hat aber nicht funktioniert, schliesslich aber doch. ;)

    Mozilla hat es wohl einfach etwas vergeigt mit der Umstellung für nicht mehr unterstützte OS, ist aber zumindest auf meiner Seite kein Problem, weil es am Ende funktioniert hat. :thumbup:

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Horstmann
    • 4. August 2023 um 23:08

    So, hier dann noch der Vollständigkeit halber meine aktuelle Version.

    Die benutzt keinen zusätzlichen, evtl. unpassenden monospace Font, was mir optisch viel besser gefällt; der grosse Nachteil ist dass man eine feste Breite für die Zähler eingeben muss, damit alle Icons und Nummern sauber übereinander stehen (s. Screenshot).

    Weil bei einem dynamischen Font zB die 11 schmaler ist als die 48, muss man dann halt in den Browserwerkzeugen die maximale Breite für die breitesten Zahlen auslesen, und entsprechend eintragen; oder einfach probieren bis es passt.

    (Edit: in Zeile 189 ist eine Art Tool zum Ausrichten; --counter_width_1/2 von kleinem Wert an vergrössern, bis die Breite der Outlines genau übereinander passt.)

    Eingebaut ist auch noch eine optionale und verschiebbare Trennlinie, die Zähler lassen sich rechts- oder linksbündig ausrichten, sowie die Option die Zähler mit keinen (0) Ordnern/Links komplett auszublenden oder sonstwie beliebig zu verändern, nur mit CSS.

    Fand ich generell ganz pfiffig, die Idee von Mitleser . ;)

    Danke an alle Beteiligten, v.a. natürlich BrokenHeart für das originale Script und Mira_Belle für die vielen Anregungen und Modifikationen. :)

    Wer Lust hat kann damit ja mal rumspielen.

    JavaScript
    // JavaScript Document
    // BookmarkCount.uc.js - modified #8c / Using default font / optional divider / 0 count adjustable
    // Author BrokenHeart
    // Modified by Mira_Belle / Horstmann / Forum members
    // Source file https://www.camp-firefox.de/forum/thema/136572/?postID=1229536#post1229536
    // Endor Repository Link https://github.com/Endor8/userChrome.js/blob/master/Firefox%20115/BookmarkCount.uc.js
    
    
    (function() {
    
        if (location.href !== 'chrome://browser/content/browser.xhtml')
            return;
        
        setTimeout(function() {
            setFunction();
        },50);
    
    
        //Custom icons in profile/chrome/icons folder
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
        let icon1 = "YourFolderIcon.png"    //  Custom  Folder Icon
        let icon2 = "YourLinkIcon.svg"          //  Custom  Link Icon
    
        function setFunction() {
    
            const css =`
    
                /**  Basic Settings  **/
    
                :root {
    
                    /*  Fixed width counters / vertical alignment with non-monospace fonts  */
                    /*  Find pixel width in browser toolbox for widest number, e.g. 48, 989 , after setting font size, weight / or use "tool" in line 190  */
                    /*  Conversion pixel -> em for flexible font size, optional  */
    
                    /*  Has brackets, 2 digits / 27px?  */
                    --counter_width_1: 2.1em;
                    --counter_width_2: 2.1em;
    
                    /*  No brackets, 2 digits */
                    /*--counter_width_1: 1.3em;
                    --counter_width_2: 1.3em;*/
    
                    /**  Align text right/left  **/
                    --align_text: flex-end;                  /*  Text/counters aligned right  */
                    /*--align_text: flex-start;*/             /*  Text/counters aligned left  */
    
                    /* Font Size / font weight / font color, disable to use default */
                    /*--counter_fontsize: 22px;*/
                    /*--counter_fontweight: 800;*/
                    /*--counter_fontcolor1: red;*/
                    /*--counter_fontcolor2: green;*/
       
                    /* Use Custom Icons, comment out to disable */
                    --icon_image_1: url("${ProfilePath}/${icon1}");
                    --icon_image_2: url("${ProfilePath}/${icon2}");
    
                    /* Use Firefox Icons, comment out to disable */
                    /*--icon_image_1: url("chrome://global/skin/icons/folder.svg");*/
                    /*--icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");*/
                }
    
    
                /* Fix container content vertical centering for first / folder counter */ 
                hbox.menu-accel-container.countClass1 {
                    align-items: center !important;
                }
    
                /*  Minimum distance to left for tight popup windows  */
                .countClass1 {
                    margin-left: 16px !important;
                }
    
                /**  Basic Settings End  **/
    
    
                /****  #1 Folder counter  ****/
    
                /* Icon 1 */
                .countClass1::before {
                    content: "";
                    background-image: var(--icon_image_1);                           /* icon1 */
                    background-repeat: no-repeat ;
                    background-size: 14px;                                   /*  icon 1 size  */
                    background-position: center;
                    margin-right: 0px;             /*  distance  icon 1  -->  folder count 2px */
                    height: 16px;
                    width: 16px;
                    /*fill: red;*/                  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
               /* Label as divider / width 0 to hide / adjust margin-inline to center */ 
    
               .countClass1 label {
                    height: 10px !important;
                    width: 0px !important;
                    background-color: rgba(20, 20, 20, 1.0) !important;
                    order: 1;
                    /*margin-inline: 5px 4px !important;*/  /* distance counter 1 -> divider -> #2 */
                    margin-inline: 3px 3px !important;
                }
    
                /* Counter 1 */
                .countClass1::after {
                    content: attr(data-value1); 
                    min-width: var(--counter_width_1) !important;
                    font-size: var(--counter_fontsize);                                                                            
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor1);                      /*  Counter text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
    
                /****  #2 Items / links counter  ****/
    
                /* Icon 2 */
                .countClass2::before {
                    content: "";
                    background-image: var(--icon_image_2);                        /* icon2 */
                    background-repeat: no-repeat;
                    background-size: 14px;                                /*  icon 2 size  */
                    background-position: center;
                    margin-right:  0px;          /*  distance icon 2  -->  item count  2px  */
                    height: 16px;
                    width: 16px;
                    fill: rgba(30, 30, 30, 1.0);  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 2 */
                .countClass2::after {
                    content: attr(data-value2); 
                    min-width: var(--counter_width_2) !important;
                    margin-right: 4px !important;              /*  distance item count  -->  arrow  */
                    font-size: var(--counter_fontsize);
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor2);                       /*  Counter text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
                /* Move arrow to the right */
                .countClass2 image {
                    order: 1;
                    margin-right: 0px !important;             /*  distance arrow  -->  popup border  */
                }
    
              /* Move Arrow closer to popup border, optional */
               menu.menu-iconic.bookmark-item {
                   padding-right: 2px !important;
                }
    
    
               /*** Extra stuff  ***/
    
    
               /** Adjust/hide if count = 0 / CSS only / optional **/
    
               /* #1 icon folder counter if menuCount = 0 */
               .countClass1[data-value1="[0]"], .countClass1[data-value1="0"] {
                     opacity: 0;
                }
    
                /* #2 icon link counter if menuitemCount = 0 */
               .countClass2[data-value2="[0]"]::after, .countClass2[data-value2="[0]"]::before,
               .countClass2[data-value2="0"]::after, .countClass2[data-value2="0"]::before {
                     /*color: rgba(87, 80, 68, 0.7) !important;
                     fill: rgba(87, 80, 68, 0.7) !important;*/
                     opacity: 0.5;
                }
    
    
               /** Override custom menu css if needed, optional **/
    
                /* Disable default left margin / override other custom menu css #1 */ 
                /*.countClass1 label {
                    margin-inline: 0px !important;
                }*/
    
               /* Work fix / override other custom menu css #2 */
               /*.menu-right.countClass2 {
                    margin-inline: 0px !important;
               }*/
    
    
    
                /*  Outlines for testing alignment / all counter outlines must have same width */ 
                /*.countClass1::after, .countClass2::after {
                     outline: 1px solid red !important;
                     outline-offset: 7px !important;
                }*/
    
                /*  Outline only for testing  */ 
                /*menu.menu-iconic.bookmark-item {
                     outline: 1px solid orange !important;
                     outline-offset: -8px !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);
    
            let bmbMenu = document.getElementById('bookmarks-menu-button');
            let bookMenu = document.getElementById('bookmarksMenu');
            let persToolBar = document.getElementById('PersonalToolbar');
            
            if(bmbMenu)
                bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(bookMenu)
                bookMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(persToolBar)
                persToolBar.addEventListener('popupshowing', onPopupShowing ); 
        }
        
        function onPopupShowing(aEvent) {
            
            let popup = aEvent.originalTarget;
    
            for (let item of popup.children) {
                if (item.localName != 'menu' || item.id?.startsWith('history'))
                    continue;
                setTimeout(() => {
                  let itemPopup = item.menupopup;
                  itemPopup.hidden = true;
                  itemPopup.collapsed = true;
                  itemPopup.openPopup();
                  itemPopup.hidePopup();
                  let menuitemCount = 0;
                  let menuCount = 0;
                  for (let subitem of itemPopup.children) {
                    if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                      if (subitem.localName == 'menuitem') {
                        menuitemCount++;
                      } else if (subitem.localName == 'menu') {
                        menuCount++;
                      }
                    }
                  }
                  itemPopup.hidden = false;
                  itemPopup.collapsed = false;
    
    
                  let label1 = item.childNodes[3];
      
                  label1.classList.add('countClass1');
                  let strCountOut1 = "[" + menuCount + "]";           //  Has brackets
                  //let strCountOut1 = menuCount;                      //  No brackets
                  label1.setAttribute('data-value1', strCountOut1);
    
                  let label2 = item.childNodes[4];
      
                  label2.classList.add('countClass2');
                  let strCountOut2 = "[" + menuitemCount + "]";       //  Has brackets
                  //let strCountOut2 = menuitemCount;                  //  No brackets
                  label2.setAttribute('data-value2', strCountOut2);
    
    
                }, 100);
            }
        }
        
    })();
    Alles anzeigen


    Edit #2: Oder vielleicht sowas? :/

    Jetzt aber raus hier, genug Selbstgespräche. ;)

    JavaScript
    // JavaScript Document
    // BookmarkCount.uc.js - modified #9 / Using default font / optional divider / 0 count adjustable
    // Author BrokenHeart
    // Modified by Mira_Belle / Horstmann / Forum members / Horstmann edition
    // Source file https://www.camp-firefox.de/forum/thema/136572/?postID=1229536#post1229536
    // Endor Repository Link https://github.com/Endor8/userChrome.js/blob/master/Firefox%20115/BookmarkCount.uc.js
    
    
    (function() {
    
        if (location.href !== 'chrome://browser/content/browser.xhtml')
            return;
        
        setTimeout(function() {
            setFunction();
        },50);
    
    
        //Custom icons in profile/chrome/icons folder
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
        let icon1 = "YourFolderIcon.png"    //  Custom  Folder Icon
        let icon2 = "YourLinkIcon.svg"          //  Custom  Link Icon
    
        function setFunction() {
    
            const css =`
    
        /**  Basic User Settings  **/
    
        :root {
    
        /*  Fixed width counters / vertical alignment with default non-monospace fonts  */
        /*  Find pixel width in browser toolbox for widest number, e.g. 48, 989 , after setting font size, weight  */
        /*  Or use tool below / Do conversion pixel -> em for more flexible font size, optional  */
    
                    /*  Has brackets, 2 digits / 27.5px?  */
                    --counter_width_1: 2.1em;
                    --counter_width_2: 2.1em;
    
                    /**  Align text right/left  **/
                    --align_text: flex-end;                  /*  Text/counters aligned right  */
                    /*--align_text: flex-start;*/             /*  Text/counters aligned left  */
    
                    /* Font Size / font weight / font color, comment out to use default */
                    /*--counter_fontsize: 22px;*/
                    /*--counter_fontweight: 800;*/
                    /*--counter_fontcolor1: red;*/
                    /*--counter_fontcolor2: green;*/
       
                    /* Use Custom Icons, comment out to disable */
                    --icon_image_1: url("${ProfilePath}/${icon1}");
                    --icon_image_2: url("${ProfilePath}/${icon2}");
    
                    /* Use Firefox Icons, comment out to disable */
                    /*--icon_image_1: url("chrome://global/skin/icons/folder.svg");*/
                    /*--icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");*/
                }
    
    
        /***  Tool for testing alignment / comment out when done  ***/
    
        /* Set font size, weight if used / create test folders  with 0, 11, 88, or 999 content */
        /* Adjust --counter_width_1+2 above, until all counter outlines have same width */  
                /*.countClass1::after, .countClass2::after {
                     outline: 1px solid red !important;
                     outline-offset: 7px !important;
                }*/
    
       /**  Basic User Settings End  **/
    
    
                /* Fix container content vertical centering for first / folder counter */ 
                hbox.menu-accel-container.countClass1 {
                    align-items: center !important;
                }
    
                /*  Minimum distance all to left, for narrow popup windows  */
                .countClass1 {
                    margin-left: 16px !important;
                }
    
    
                /****  #1 Folder counter  ****/
    
                /* Icon 1 */
                .countClass1::before {
                    content: "";
                    background-image: var(--icon_image_1);                           /* icon1 */
                    background-repeat: no-repeat ;
                    background-size: 14px;                                     /*  icon 1 size  */
                    background-position: center;
                    margin-right: 0px;                      /* distance  icon 1 <-> folder count */
                    height: 16px;
                    width: 16px;
                    /*fill: red;*/                            /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 1 */
                .countClass1::after {
                    content: attr(data-value1); 
                    min-width: var(--counter_width_1) !important;
                    font-size: var(--counter_fontsize);                                                                            
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor1);             /*  Counter 1 text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
              /* Move Label to right / use as optional divider / width 0 to hide / adjust margin-inline to center */ 
              .countClass1 label {
                    height: 10px !important;
                    width: 0px !important;
                    background-color: rgba(20, 20, 20, 1.0) !important;
                    order: 1;
                    /*margin-inline: 5px 4px !important;*/  /* distance counter 1 -> divider -> #2 */
                    margin-inline: 3px 3px !important;
                }
    
    
                /****  #2 Items / links counter  ****/
    
                /* Icon 2 */
                .countClass2::before {
                    content: "";
                    background-image: var(--icon_image_2);                        /* icon2 */
                    background-repeat: no-repeat;
                    background-size: 14px;                                /*  icon 2 size  */
                    background-position: center;
                    margin-right:  0px;                 /*  distance icon 2  <->  item count  */
                    height: 16px;
                    width: 16px;
                    fill: rgba(30, 30, 30, 1.0);  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 2 */
                .countClass2::after {
                    content: attr(data-value2); 
                    min-width: var(--counter_width_2) !important;
                    font-size: var(--counter_fontsize);
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor2);                 /*  Counter 2 text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
                /* Move arrow to the right */
                .countClass2 image {
                    order: 1;
                    margin-inline: 4px 0px !important;  /* distance item count -> arrow  ->  popup border */
                }
    
              /* Move Arrow closer to popup border, optional */
               menu.menu-iconic.bookmark-item {
                   padding-right: 2px !important;
                }
    
    
               /*** Extra stuff  ***/
    
              /** Adjust/hide if count = 0 / CSS only / optional / for no, square & round brackets **/
    
               /* #1 icon folder counter if menuCount = 0 */
               .countClass1[data-value1="[0]"], 
               .countClass1[data-value1="(0)"], 
               .countClass1[data-value1="0"] {
                     opacity: 0;
                }
    
                /* #2 icon link counter if menuitemCount = 0 */
               .countClass2[data-value2="[0]"]::after, .countClass2[data-value2="[0]"]::before,
               .countClass2[data-value2="(0)"]::after, .countClass2[data-value2="(0)"]::before,
               .countClass2[data-value2="0"]::after, .countClass2[data-value2="0"]::before {
                     /*color: rgba(87, 80, 68, 0.7) !important;
                     fill: rgba(87, 80, 68, 0.7) !important;*/
                     opacity: 0.5;
                }
    
                /* Arrow */
                :is(.countClass1[data-value1="[0]"] + .countClass2[data-value2="[0]"], 
                    .countClass1[data-value1="0"] + .countClass2[data-value2="0"], 
                    .countClass1[data-value1="(0)"] + .countClass2[data-value2="(0)"]) image {
                    /*opacity: 0;*/
                    fill: rgba(255, 150, 68, 1.0) !important;
                }
    
                /* Hide empty Popup */
                menu.menu-iconic.bookmark-item menupopup[emptyplacesresult="true"] {
                     display: none !important;
                }
    
              /** Adjust/hide if count = 0 / End **/
    
    
    
               /** Override other custom menu css if needed, optional **/
    
               /* Work fix / override other custom menu css #2 */
               /*.menu-right.countClass2 {
                    margin-inline: 0px !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);
    
            //let bmbMenu = document.getElementById('bookmarks-menu-button');
            let bookMenu = document.getElementById('bookmarksMenu');
            let persToolBar = document.getElementById('PersonalToolbar');
            
            //if(bmbMenu)
                //bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(bookMenu)
                bookMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(persToolBar)
                persToolBar.addEventListener('popupshowing', onPopupShowing ); 
        }
        
        function onPopupShowing(aEvent) {
            
            let popup = aEvent.originalTarget;
    
            for (let item of popup.children) {
                if (item.localName != 'menu' || item.id?.startsWith('history'))
                    continue;
                setTimeout(() => {
                  let itemPopup = item.menupopup;
                  itemPopup.hidden = true;
                  itemPopup.collapsed = true;
                  itemPopup.openPopup();
                  itemPopup.hidePopup();
                  let menuitemCount = 0;
                  let menuCount = 0;
                  for (let subitem of itemPopup.children) {
                    if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                      if (subitem.localName == 'menuitem') {
                        menuitemCount++;
                      } else if (subitem.localName == 'menu') {
                        menuCount++;
                      }
                    }
                  }
                  itemPopup.hidden = false;
                  itemPopup.collapsed = false;
    
    
                  let label1 = item.childNodes[3];
      
                  label1.classList.add('countClass1');
                  let strCountOut1 = "[" + menuCount + "]";   //  Has square brackets
                  //let strCountOut1 = "(" + menuCount + ")";       //  Has round brackets
                  //let strCountOut1 = menuCount;                                //  No brackets
                  label1.setAttribute('data-value1', strCountOut1);
    
                  let label2 = item.childNodes[4];
      
                  label2.classList.add('countClass2');
                  let strCountOut2 = "[" + menuitemCount + "]"; //  Has square brackets
                  //let strCountOut2 = "(" + menuitemCount + ")";     //  Has round brackets
                  //let strCountOut2 = menuitemCount;                              //  No brackets
                  label2.setAttribute('data-value2', strCountOut2);
    
    
                }, 100);
            }
        }
        
    })();
    Alles anzeigen
  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 19:30
    Zitat von FuchsFan

    So, das im Script oder in userChrome.css eingetragen ergibt dann hier:

    CSS
     #profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
        width: 33px !important;
        height: 33px !important;
        padding: 6px  !important;
    }

    (auch mit neuem Code von Aris für die Button getestet)


    Jetzt kapier ich's erst - du willst das Icon grösser haben als die anderen, das Problem war nicht dass es kleiner als der Rest war... =O ;)

    Das geht tatsächlich über fixe Grösse + weniger Padding, da war Dharkness auf der richtigen Spur.

    Übrigens ist jetzt dein Button/Icon etwas zu gross, width/height sollten wohl 32px sein statt 33px.

Unterstütze uns!

Jährlich (2025)

92,9 %

92,9% (604,17 von 650 EUR)

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