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

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 6. Mai 2025 um 22:07
    Zitat von milupo
    Zitat von Horstmann

    Das, und base64 Dingens (Fachbegriff) Icons, va die aus den 90ern...

    Base64-Grafiken sind aber universell. Für Übersichtsseiten wie die Github-Site von Endor ist das besser. Nach Installation des Skripts hat jeder sofort ein Symbol, das funktioniert.

    Sehr guter Punkt, aber dafür kann man auch eine Grafik benutzen die keine 300 Zeilen im Code einnimmt, zB einen .svg 3 Zeiler.
    Oder noch besser, einfach ein beliebiges Fx internes Icon als Platzhalter benutzen.

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 6. Mai 2025 um 21:06
    Zitat von Speravir
    Zitat von Horstmann

    Generell hänge ich einfach den addEventlistener unten an, mit der ID des Buttons, und ausserhalb des oberen Codeabschnitts

    Wenn mir niemand zuvorkommt, werde ich das ausprobieren.

    Müsste die Funktion an sich dann nicht auch nach unten?
    Nicht daß ich Ahnung davon hätte, du bist der Experte. :)
    Aber ich habe keine Idee was dieses Script überhaupt bewirken soll, also wüsste ich nicht wie ich das testen und einen Code vorschlagen könnte.:/

    Zitat von BrokenHeart

    Habe das mal geändert:

    Was man wirklich generell ändern sollte: eine Funktion onClick zu nennen, oder sonstwas das derart kriminell irreführend ist. ;)
    Das, und base64 Dingens (Fachbegriff) Icons, va die aus den 90ern... <X

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Horstmann
    • 5. Mai 2025 um 00:22
    Zitat von Zitronella

    Auf jeden Fall konnte ich jetzt auch meine anderen Skripte anpassen, da ja quasi nur eine Zeile auskommentiert und durch eine andere ersetzt werden musste.

    Prima! :)
    Nicht bei allen Scripts funktioniert das gleiche Schema, aber einfach fragen wenn was hängt.

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Horstmann
    • 4. Mai 2025 um 23:14
    Zitat von Zitronella

    Ich möchte kein neuen Post aufmachen, daher schreibe ich hier weiter, weil mir gerade auffiel dass noch andere Skripte nicht mehr funktionieren. Vielleicht gibts dafür auch ne Lösung?

    Nur grob getestet:

    JavaScript
    (function() {
    
       if (location != 'chrome://browser/content/browser.xhtml')
          return;
    
       try {
          CustomizableUI.createWidget({
             id: 'quick-media-codec-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {
                var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                   id: 'quick-media-codec-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Quick Media Codec',
                   tooltiptext: Services.prefs.getBoolPref('media.play-stand-alone') ?
                      'Quick Media Codec is playing' : 'Quick Media Codec is stopped',
                   //oncommand: '(' + onCommand.toString() + ')()'
                };
                for (var a in attributes) {
                   button.setAttribute(a, attributes[a]);
                   button.addEventListener('click', onCommand );
                };
                function onCommand() {
                   var isEnabled = !Services.prefs.getBoolPref('media.play-stand-alone');
                   Services.prefs.setBoolPref('media.play-stand-alone', isEnabled);
                   var windows = Services.wm.getEnumerator('navigator:browser');
                   while (windows.hasMoreElements()) {
                      let button = windows.getNext().document.getElementById('quick-media-codec-button');
                      if (isEnabled)
                         button.setAttribute('tooltiptext', 'Quick Media Codec is playing')
                      else
                         button.setAttribute('tooltiptext', 'Quick Media Codec is stopped');
                   };
                };
                return button;
             }
          });
       } catch(e) { };
    
       var css =
          '#quick-media-codec-button[tooltiptext="Quick Media Codec is playing"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QgVCgMdA8c0JwAAAw1JREFUOMttk71LK3kYhZ/JTExGQswXuopfZC1uo+til8JGqxXELfJRWWhpsRYG8SqKippL/gUjbhUTuwXBJojmD/ALtsoqEi0yIZqQhFEmv5kt7kbYZU99nsOB874S/2hra4vt7W329vaClmWtWpY1aVlWEECSpAdJkq4kSfq2vr7+0PYCSABfv35lf3+fzc3NlBBioVKpEAgE8Hg8ANRqNcrlMn6/H1mWj3Z2dhbbjBSPx0kmk6ytrd1Uq9Wf+vv7mZ2dxe/3oygKlmVhGAaVSoWzszOKxSIej+f24OBgPB6Pf28Qj8dT1Wp1IRQKMTMzg9PpRFVVTNMEQAjBx8cH9Xqdi4sL8vk8Xq/3KJlMLkrLy8tBIcRfgUCApaUlOjs7UVWVdDpNNBrFZrNhWRZCCHRdp1arcXx8jKZpyLL8o63Vaq1qmkY4HMbpdNLR0QHA3d0dKysr3N7eIkkSiqKgqioul4u5uTk0TaPVaq3aDMOY7O3txePxYLfbsdlsALy9vVEqldjY2CCRSGCaJrIs43A48Hq99PX1YRjGpM0wjKDP58M0TSzLQpKkz4DX11eazSb5fJ75+Xmur6+x2+3Isozf78cwjKAihMCyLP6ry8tL6vU6qqoyNDSEqqqf4W0JIVBM03zQNO2LEIJ2mCRJeDwe3G43QgimpqZIJBLYbDbe398xTZNSqYRpmg+KaZpXj4+PX6rVKi6Xi46ODhRFobu7G7vdzu7uLqFQ6F9z1mo1CoUCPp/vSh4bG/tTUZTfXl5eGB8fR1EUHA4HxWKRw8NDBgcHP2Fd12k2m6RSKRqNBrIsR+T7+/u30dHRwaenp5/tdjsDAwMIIZienkYIgWmaGIaBrus0Gg3Oz8/J5XKoqnqUTqd/l2OxGCcnJ39MTEz8enNz88Pz8zPDw8OfdXVdR9d1yuUyqVSKXC5HV1fXbSaT+SUWi30/5Wg0SiaTIRKJpIQQC7VajZGREXp6egAolUoUCgXcbjeKohxls9nFNvO5SyQSIZvNEg6Hg8D/vjPw7fT09KHtBfgbw8eNC0eG6lMAAAAASUVORK5CYII=)} ' +
          '#quick-media-codec-button[tooltiptext="Quick Media Codec is stopped"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QgVCgI2tmD8JgAAAutJREFUOMttk71LK2kYxX+TmXxMMHFCIm78WCHX4jayu9hZ+AesIG5hDNhppTY2QVRQlKhcUltG3EoTuwXBJgj6D3hJaa4iKpKE6AwTjXF8593iXlN56nN4DuecR+EX1tfX2djYYGtrKyGlXJJSjkopEwCKolwpinKmKMq31dXVqw8ugAKwsrLC9vY2a2trOSHETL1eJxaLYRgGAJZlUavViEajqKq6t7m5OfuhUdLpNNlsluXl5QvTNP/o6+tjfHycaDSKpmlIKXEch3q9zvHxMbe3txiG8X1nZ+fPdDr900E6nc6ZpjkzMjLC2NgYuq6jaRoejwcAIQStVgvbtjk9PeX8/JxIJLKXzWZnlcXFxYQQ4kcsFmNhYQFd1wkGg3wG27axLIv9/X2q1Sqqqn7R3t/fl2q1GnNzcwQCAYLBIJlMhkajgWmaNJtNpJS0Wi3y+TxCCCYmJshkMnR1dS1pjuOMxuNxDMPA6/UC4Lour6+v2LZNo9Fo5wDg9/uJRCL09PTw8vIyqjmOk+jt7cV1XaSUANzf3/P29sbT0xOWZaGqKkIIAFRVRVVVotEolmUlNCFEW/iBUqnE4+MjDw8PSCmJx+N0dHTwaxNtnhACzXXdq2q1+lUI0b4SCoWQUuLxeJBSEg6H8fv9bZHrulQqFVzXvfK4rnt2fX2NaZq8vr4C4PP5CAQChEIhwuEwuq7j8/kAaLVaWJZFuVzGdd0zZXp6OuE4zo9EIsH8/DyGYRAKhT6tsdFoYNs2u7u7XF5e4vV6v6ilUulpaGjo95ubm7+8Xi/9/f3tQKWUuK6L4zg8Pz/TaDQ4OTmhWCyi6/rewcHBv2oqleLw8PC/4eHhfy4uLn67u7tjYGCgbbfZbNJsNqnVauRyOYrFIp2dnd/z+fzfqVTq55SnpqbI5/Mkk8mcEGLGsiwGBwfp7u4GoFKpUC6XCYfDaJq2VygUZj807U6SySSFQoHJyckE8Ok7A9+Ojo6uPrgA/wO0dY4EG2coXQAAAABJRU5ErkJggg==)} ';
       var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
       document.insertBefore(stylesheet, document.documentElement);
    
    })();
    Alles anzeigen
    JavaScript
    // ContextTranslate.uc.js
    
    (function () {
    	if (location != 'chrome://browser/content/browser.xhtml')
    		return;
    	let translate = function () {
    		let browserMM = gBrowser.selectedBrowser.messageManager;
    		browserMM.addMessageListener('getSelection', function listener(message) {
    			let t = (message.data !== '');
    			let e = (document.charset || document.characterSet);
    			if (t) {
    					openWebLinkIn('https://translate.google.com/?sl=auto&tl=de&text=' + encodeURIComponent(message.data), 'tab');
    			} else {
    				openWebLinkIn('https://translate.google.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
    			};
    			browserMM.removeMessageListener('getSelection', listener, true);
    		});
    		browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
    	}
    	let menuitem = document.createXULElement('menuitem');
    	menuitem.id = 'context-googletranslate';
    	menuitem.setAttribute('label', 'gTranslate->de');
    	menuitem.setAttribute('tooltiptext', 'Mit GoogleTranslate übersetzen');
    	//menuitem.setAttribute('oncommand', '(' + translate.toString() + ')()');
    	menuitem.classList.add('menuitem-iconic');
    	menuitem.addEventListener('command', translate );
    	//Wer kein Icon möchte kann die nächsten beiden Zeilen auskommentieren/löschen
    	//menuitem.style.listStyleImage = 'url("https://translate.google.com/favicon.ico")';
    	menuitem.style.listStyleImage = ' url("data:image/png;base64,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")';
    	let refItem = document.getElementById('context-inspect');
    	refItem.parentNode.insertBefore(menuitem, refItem);
    })();
    Alles anzeigen

    Zitat von Zitronella

    okay, ich hoffe jemand findet noch ne Lösung. Derweil schreibe ich hier mal noch welche rein, die nicht mehr funktionieren:

    Dafür auch ein Vorschlag; bei allen diesen Scripts hier bin ich mir nur teils sicher was sie eigentlich machen sollen, also schwer zu testen.

    JavaScript
    (function() {
    
       if (location != 'chrome://browser/content/browser.xhtml')
          return;
    
       try {
          CustomizableUI.createWidget({
             id: 'accessibility-blockautorefresh-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {
                var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                   id: 'accessibility-blockautorefresh-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'accessibility.blockautorefresh',
                   tooltiptext: Services.prefs.getBoolPref('accessibility.blockautorefresh') ?
                      'Weiterleitung ist deaktiviert' : 'Weiterleitung ist aktiviert',
                   //oncommand: '(' + onCommand.toString() + ')()'
                };
                for (var a in attributes) {
                   button.setAttribute(a, attributes[a]);
    							 button.addEventListener('click', onCommand );
                };
                function onCommand() {
                   var isEnabled = !Services.prefs.getBoolPref('accessibility.blockautorefresh');
                   Services.prefs.setBoolPref('accessibility.blockautorefresh', isEnabled);
                   var windows = Services.wm.getEnumerator('navigator:browser');
                   while (windows.hasMoreElements()) {
                      let button = windows.getNext().document.getElementById('accessibility-blockautorefresh-button');
                      if (isEnabled)
                         button.setAttribute('tooltiptext', 'Weiterleitung ist deaktiviert')
                      else
                         button.setAttribute('tooltiptext', 'Weiterleitung ist aktiviert');
                   };
                };
                return button;
             }
          });
       } catch(e) { };
    
       var css =
          '#accessibility-blockautorefresh-button[tooltiptext="Weiterleitung ist aktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACdklEQVR4nJVSW0iUQRj9Zvd3V3d/3VbR8LJJkraCmZobqQViEF0t3DakBzMTKXvqQQgMpB56jC5kN6nMyjJ0wS4YFCUhKBvUGhQmGhopXiqytZ3559ZD/bK6RnVeZuYbzvnmO2cA/oA1+bnGP92FwrBY8dTFo1WbS9fX/osACj2szslCh+rKjuUUOY73+0YffJ76/kRKAZRxPvnp22B/34fuF909ZFGBwg1rlYN1O86vWBVfwwQFJigwySB0/2VydrjXO17VdPZOd9gI2XkrCxwZtgrCMRCO5cI1SH+AMYYuz92t3t+7352r8+aMetnXP2pVEl6lONVt0siiqNCkxogkHEvCMMIcI8wwokDMyMSXBT5GtE5MTEgldJ7G082PAoE9mzbuS/X6n07dfNs7fplxDtboyKg8T8wlSworpFxDpiRaZLfbbQDwdZ4AAMCNpjYfwWXFqs3s7Op6PKzX1SXuGpNNrhMSISkULoQgcyZW15ZnFRRnVnEpQEgGPV3DZ1qut47o5JNXDje8fjZ2re22d3RhQwUAgGCqZrqWHtHdlgrLsCdVXCAEc2REEOtQtpYcSK6MiHSX3rra/iYsxvz8vIj6c553apySxiRDTFDJBEVMUEm5hjSuSY1rKDCDp/0ds57mxvbn81IYGxsXcTHJA6nZ0R4OmqIJDWmcAGYYEYYBsyDCDAM1EIslkW2JDqa1vB8YnJ0Xo6/XP6Qak/ossYYco5Um/I7tV4QMS8yCaGZamxzqVCo77nb6w36iDpfLZUpMiU+32syJEqQBIQSOEnZCIB4/8tBcfq/V61vI+SuqG7bX73LvTP9vog5npjPspTp+Ah8eSZ/sO5KDAAAAAElFTkSuQmCC)} ' +
          '#accessibility-blockautorefresh-button[tooltiptext="Weiterleitung ist deaktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACd0lEQVR4nJVSW0hUURTd585LTRMdk1F0akJtKiMfjVl9mBGhI1nUGFEQ4oeIPz0++qhA7NeP6CPKogIVplDR3iMUjWSB+BE9IMQHKtHMWD5SvHfuvWef3Y8j6ijV+jnn7MNa+5y1NsA6KMrLNax3txzSWsWWC8dqTu7Nqf8XAbb8ULAzhzW4ndcO27TGviA8D8n0GgQCFwLH5mHo3fhC79v3/eqaAiV7dhkbj9hvFSWptcR1ANQAUIfInlCHQNg0em/SXtPk7emN+oIrO33f7nj5HGkKgCYTaQqQphDoMpCuEuoIVqY66q1jz2o97vwIb8moD19HJig992Phht8VZhGOJV0lwTVCFMQRGBcS40JijMBikcA+SCneUChEKzwAAKirKnddzhzv6pyytb0JGu8iImyMNcfW24LNWcaF/SgYm0XT3KXhlC1+v3/GuFrgTvurAeWE+2CyBZy+npejkbr11NFaq0ErJmJMAKAQsrpk4nnPodyyrIQaEhxAIHR8j7n54FH3eITcXneg4Wko4WFrl29idUMjAECYU3yJVb5IqAFwHSyo5DjOlt7WVAUNkgTbTLPuKxnT1XGessrmDt+XqBhdBXkmb0XitzSTshW4zgg1AtQZISdEYigYoWBsmpt/NU9trrrx2OdfkcKPQFDE2XcMFsfPVBkwbCSuMcERODKmCwkWEwCJKM5hlMt/phW2Dg4NL6yIse/z8Iiekd9vMyh5iaClcpQYR4k4SkxfXAN6zOT9OUe1t/vFp6hJXBool8tsT03KTo6R0ghAYoyBJyF0nRFsapnPPN3W+WRgNeevaDpTetVzvDL7v4kRbHc6o14awR8IFzD9TbnyZAAAAABJRU5ErkJggg==)} ';
       var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
       document.insertBefore(stylesheet, document.documentElement);
    
    })();
    Alles anzeigen
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 4. Mai 2025 um 12:18
    Zitat von FuchsFan

    Das sehe ich auch so, aber so funktioniert es nun mal nicht. Einen weiteren Code gibt es nur für das Bereitstellen der Icons, ansonsten keine weiteren Anpassungen. Ich betone nochmals, der Code aus #1 funktioniert bis v138 ohne Probleme, deshalb kann es nur an Änderungen in den folgenden Versionen liegen.

    Nochmal die Frage: an welchem Punkt ist das Problem aufgetreten?
    Gleich nach dem Umstellen von .menu-right auf menu::after, oder #ExtraConfigMenu-popup [id^="submenu-"]:hover::after etc.

    Und ist das Problem das Hovern über dem Sub Popup, nachdem man die Maus aus dem ersten (Haupt) Popup herausbewegt schliesst sich der Sub ohne dort etwas anzuklicken?

    Und: der aktuelle, komplette CSS Code?;)

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 23:28
    Zitat von FuchsFan
    Zitat von Horstmann

    Wenn du Laune hast, probier mal das hier, würd mich interessieren ob's a) geht und b) die Pause entfernt:

    Beide Codes funktionieren, Verzögerung ganz gering noch, ich sage dazu normal.:)

    Edit:

    Aber die Popups schließen sofort bei Berührung.:rolleyes:

    Das kann aber eigentlich nichts mit diesem CSS zu tun haben, ist ja nur zum stylen der Pfeile. :/

    Falls sich das trotzdem dadurch geändert hat, müsste man mal deinen kompletten CSS Code sehen; falls es generell vorher schon ein Problem war, wirds schwieriger.

    An welchem Punkt, bzw. mit welchem CSS Code, hat sich das Problem (schliesst bei hover? eingestellt, falls es ein CSS Code war?

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 22:26
    Zitat von FuchsFan
    Zitat von Horstmann

    eine kurze Verzögerung zwischen hover Status (keine Funktion) und dem Moment in dem ein Popup dann aufgeht

    Ja, ist mir sofort aufgefallen, aber ist ja nur ein Päuschen.

    Wenn du Laune hast, probier mal das hier, würd mich interessieren ob's a) geht und b) die Pause entfernt:

    CSS
    #ExtraConfigMenu-popup [id^="submenu-"]:is(:hover,[open])::after { Code hier }

    Ansonsten sollten auch beide Funktionen klappen (keine Verzögerung) mit dem hier:

    CSS
    #ExtraConfigMenu-popup [id^="submenu-"]:hover::after,
    #ExtraConfigMenu-popup [id^="submenu-"][open]::after { Code hier }

    Bei dem Script ist es scheint's nicht nötig, aber vermutlich nur weil hier jedes [id^="submenu-"] Element versucht ein Submenu/Popup zu öffnen, auch wenn keines da ist.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 21:45
    Zitat von .DeJaVu

    Die 115 ESR ist eh dabei aussen vor, weil schlichtweg zu alt - falls noch genutzt.

    Ist noch genutzt, zwangsweise, hab aber eine Testmaschine mit aktuellem Fx für komplexe Fälle.
    Mit der Code Lingo halte ich mich aber auf dem Laufenden, keine Sorge. ;)

    Was ich meinte war :open als Pseudoklasse wie :hover und :active, meiner Erinnerung nach hat das noch nie gegriffen, kann mich aber täuschen.


    Zitat von milupo

    Weil es open als Pseudoklasse nun mal in CSS nicht gibt. Und wenn Mozilla sie erfände, müsste sie dann :-moz-open heißen, da sie dann proprietär wäre.

    Hmm... ;)
    Ok, erst seit 136 in FX, also - jetzt!

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 21:37
    Zitat von FuchsFan

    jetzt funktioniert es wie gewünscht, und zwar mit diesem String.

    #ExtraConfigMenu-popup :is([id^="submenu-"][open])::after {    

    Prima! :)

    Die hover Funktion hast du nur damit (und der Version von Sören) nicht mehr, aber das zeigt sich in diesem Fall/Script wohl nur durch eine kurze Verzögerung zwischen hover Status (keine Funktion) und dem Moment in dem ein Popup dann aufgeht (open Funktion).

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 21:30
    Zitat von .DeJaVu

    Ersteres ist ein Selektor, dann folgt noch ein (Unter-)Selektor., usw. Das Element, was genau alle Selektoren erfüllt, wird angesprochen.

    Denke du hast recht damit, mit den Attribut Selektoren tue ich ich mich manchmal schwer.
    Leider frisst Firefox :open anscheinend nicht als Pseudoklasse, dann wär's etwas einfacher.:/

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 19:41
    Zitat von Sören Hentzschel

    Das hat immer noch das überflüssige :is() mit drin. Kürzer:

    CSS
    #ExtraConfigMenu-popup [id^="submenu-"][open]::after { }

    Ich glaube der Code ist so oder so etwas Murks, auch wenn er oberflächlich funktioniert.
    Wird [id^="submenu-"] überhaupt wahrgenommen in dem Zusammenhang, oder nur [open] (= Verkettung von Attributen, geht das überhaupt)?

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Horstmann
    • 3. Mai 2025 um 17:32
    Zitat

    Wer Rechtschreib-, oder Grammatikfehler findet, darf sie gern behalten

    Ich bin reich! ;)

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 14:32
    Zitat von .DeJaVu

    Da ist jetzt noch nix mit hofer und after drin.

    Aber ich selbst würde :hover und ::after nicht zusammelegen wollen, weil mWn ::after nur für das :hover gilt, aber nicht ohne :hover. Also braucht es schon wieder zwei Definition.

    ::after
    :hover::after

    Man braucht aber eh eine Definition für sowohl mit als auch ohne :hover, da sparst du nix. :/
    Den Code zu straffen, nesten und zu minimieren ist was anderes, aber die beiden Zustände musst du so oder so getrennt angeben.

    In diesem Fall macht mE der Attribut Selektor von Sören eine Menge Sinn, schlank und einfach.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 3. Mai 2025 um 12:38
    Zitat von FuchsFan

    Bei Hover wird zwar das Icon angezeigt, das Submenü öffnet sich, aber sofern mit der Maus das Popup berührt wird verschwindet es .

    Ich bin so schwach...;)

    Ein [open] könnte man noch irgendwo mit reinquetschen; aber weil ich nicht meine Nightly Testmaschine anwerfen möchte, hier nur grob geraten, weiss nicht ob das mit ::after klappt:

    CSS
    #ExtraConfigMenu-popup [id^="submenu-"]:hover::after,
    #ExtraConfigMenu-popup :is([id^="submenu-"][open])::after {	}
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 2. Mai 2025 um 22:10
    Zitat von milupo
    Zitat von Horstmann

    Deine Version(en) funktionieren bei mir nur das für bzw. in dem bei Programmstart geöffneten Fenster, also das erste "Original" Fenster.

    Ich bin froh, dass ich Skripte halbwegs anpassen kann. Und mein Eindruck ist, dass doch sehr wenige die Skripte über mehrere Fenster hinweg verwenden. Zur Zeit sind es zwei, drei Nutzer.

    Mehr kann ich auch nicht, und bin genauso froh darum.;)
    Es ist nur ein minimaler Unterschied zwischen den beiden Varianten, und gleich einfach umzusetzen, also warum nicht die bessere Variante benutzen?

    Bei mir am Mac ist es sehr auffällig, weil hier Firefox nicht beendet wird beim Schliessen aller Fenster, also habe ich oft eine aktive, aber fensterlose Fx App im Dock; ich vermute sehr viele User stolpern eventuell mal über das Problem, ohne es zu melden oder nachvollziehen zu können.

    Nicht zu vergessen dass mehrere Fenster sehr wohl benutzt werden, gerade auch in einem Setup mit mehr als einem Monitor; in dem Fall kann es ganz schnell Ärger geben mit einem Script das nicht alle Fenster - wie im Einzelfall gewünscht - bedienen kann.

    Letztlich ist es aber auch einfach ein Fehler im Script, ich glaube dieser krummnasige Spacken fing damit an, und wurde dann korrigiert von diesem gutaussehenden Genie. 8)

    Edit:
    Zum Vergleich, hier nochmal ein Beispiel am aktuellen Script; die Fix #1 und Fix #2 Codeblöcke sind kinderleicht gegeneinander auszutauschen.
    Wie gesagt, das Ganze gilt nur für diese Art von Aufbau bzw. Buttonimplentierung.

    JavaScript
    (function() {
      if (location != 'chrome://browser/content/browser.xhtml') return;
        try {
                CustomizableUI.createWidget({
                id: 'Profilordner',
                type: 'custom',
                defaultArea: CustomizableUI.AREAS,
                onBuild: function(aDocument) {
                   var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                   var props = {
                        id: 'Profilordner',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        removable: true,
                    // Name im AnpassungFenster
                        label: 'zum Aktuellen Profilordner',
                    // Name bei MausHover wenn in Symbolleiste
                       tooltiptext: 'zum Aktuellen Profilordner',
                         style: 'list-style-image: url(file:///C:/Users/DBI/AppData/Roaming/Mozilla/Firefox/Profiles/zvjpsewu.DBI/chrome/icon/userProfil.ico)',
    
                      //  Alte inline Version, obsolet
                      //  oncommand: "Services.dirsvc.get('ProfD', Ci.nsIFile).launch();"
                   };
                   for (var p in props)
                      toolbaritem.setAttribute(p, props[p]);
    
                      // Fix #1 nur für original Fenster
                      //toolbaritem.addEventListener('click', event => {
    					        //     if (event.button == 0) {
                      //          Services.dirsvc.get("ProfD", Ci.nsIFile).launch();
                      //               }
    			      //  	});
    			      // Fix #1 Ende
    
                   return toolbaritem;
                    }
                 });
              } catch(e) { };
    
               // Fix #2
               document.getElementById('Profilordner').addEventListener('click', event => {
                      if (event.button === 0) {
                          Services.dirsvc.get("ProfD", Ci.nsIFile).launch();
                   }
               });
               // Fix #2 Ende
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 2. Mai 2025 um 20:59
    Zitat von milupo

    Erst einmal zum Profilordner-Skript. Probiere mal diese Version:

    Ich wollte nur nochmal darauf hinweisen.
    Deine Version(en) funktionieren bei mir nur das für bzw. in dem bei Programmstart geöffneten Fenster, also das erste "Original" Fenster.

    ZB: Firefox starten, zweites Fenster öffnen, erstes "Original" Fenster schliessen -> kein Script mit dieser Methode (Fix 1 in den Scripts im Link) funktioniert dann mehr, zumindest hier, obwohl der Button erzeugt wird.

    Das gilt nur für Scripts mit diesem Aufbau.

  • Und noch ein kleines Script, was nicht mehr geht

    • Horstmann
    • 2. Mai 2025 um 18:57
    Zitat von mkpcxxl

    geht es jetzt

    Prima! :)

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 2. Mai 2025 um 15:30
    Zitat von FuchsFan
    Zitat von Horstmann

    Unglaublich ....

    Tief Luft holen bringt den Puls wieder in Ordnung. Nun hör bitte auf damit, seid ihr alle unfehlbar?

    Oh ja, ich höre auf damit.
    Den Pfad habe ich gefunden, aber den kann dir evtl. jemand anders vorlesen, der die Browser Werkzeuge anwerfen möchte. ;)


    Zitat von .DeJaVu

    is() fand ich gar nicht mal so schlecht, wenn es nicht anwendbar ist - andere Baustelle. bitte stehen lassen

    Du brauchst dann immer noch den spezifischen Context zur Eingrenzung, sonst baust du das ganze UI um.:/

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 2. Mai 2025 um 15:02
    Zitat von .DeJaVu
    Zitat von Horstmann

    mit oder ohne > ...

    Das > bezeichnet ein direktes Child. Ohne sind es alle Elemente unterhalb des Mutter-Elements, also auch in 2./3./usw Ebene

    Exakt, und das war auch das generelle Problem mit meinem Ansatz weiter oben.
    Aber ohne Script - was jetzt endlich da ist - weiss ich ja nicht was ein Child von was ist, und wo #ExtraConfigMenu-popup eingefügt wird.
    Ein ::after Element ist zudem kein Child in dem Sinne, also kann man dafür keinen direkten Combinator verwenden.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • Horstmann
    • 2. Mai 2025 um 14:56
    Zitat von FuchsFan
    Zitat von Mira_Belle

    Wurdest Du nicht aufgefordert ganze Skripte zu posten?

    Nun fangt doch nicht schon wieder damit an, das nervt ja langsam. Aber du hast ja nicht ganz Unrecht, bitteschön.

    Unglaublich ....

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

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