
Button um weiteres Profil zu öffnen
-
Mira_Belle -
20. Juli 2023 um 14:01 -
Erledigt
-
-
Und was für ein Dateiformat hat Dein Symbol?
png-Datei, habe es aber auch mit jpg versucht, ändert nichts.
So funktioniert es nicht?
Sag mal bitte, wohin mit dem Code, gut wäre im Script.
-
gut wäre im Script.
Wenn da schon ein CSS Code drin ist bei dir, dann eiinfach drunter.
Das ist jetzt das Skript aus Beitrag Nr. 157
JavaScript
Alles anzeigen// JavaScript Document // QuickProfilesChangesButton.uc.js // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231647#post1231647 // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1232240#post1232240 // Version 1.07 from August 3, 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'); toolbaritem.onclick = event => onClick(event); 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: 'Profile Changer', }; 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 = "3.png"; // Name & Dateiendung des anzuzeigenden Symbols! var css =` #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") } #profileschange-button > image { width: 53px !important; height: 53px !important; } `; var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET); function onClick(event) { if (event.button != 0){ return; } let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-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 } })();
-
Der Selektor von hier RE: Button um weiteres Profil zu öffnen. brachte es nicht.
Der war dann richtig:
CSS#profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon { width: 38px !important; height: 38px !important; }
Und so #profileschange-button hast Du es ja auch im Script jetzt eingetragen, danke, Andreas.
-
danke, Andreas.
Gerne wie immer
-
Was kann ich machen, dass die Grafik im Button größer erscheint?
Eine Änderung der Pixelzahl (Vergrößerung) für die Grafik bringt nichts.
das wäre normal:
und so mit dem Script:
Das Icon für dieses Script funktioniert hier wie alle anderen auch; ich vermute du hast evtl. CSS am Laufen das die Icongrösse für manche Buttons ändert, aber nicht für alle.
Es ist mir auch nicht so ganz klar, worauf die Screenshots basieren - ist das normale Icon für einen anderen Button mit CSS eingefügt, oder in der Bildbearbeitung manipuliert?
Wäre vielleicht sinnvoller das mal zu eruieren, statt eine Einzelregel für nur einen Button reinzuwürgen; aber wenn's auch so geht, geht's auch so.
-
was wäre der Vorteil gegenüber .svg?
BeitragRE: Button um weiteres Profil zu öffnen
[…]
console.log('Der Text, der geloggt werden soll') oder eben console.log(variable).
Zum Thema base64:
[…]
Sören Hentzschel2. August 2023 um 20:21 Verstehe ich nicht so ganz; base64 ist langsamer an sich, oder mit Code eingebettete Icons generell?
.svg kann man ja auch als Code in CSS benutzen, ohne eine separate Bilddatei zu benötigen - wenn man tatsächlich den einen Schritt sparen muss.
-
ich vermute du hast evtl. CSS am Laufen das die Icongrösse für manche Buttons ändert, aber nicht für alle.
Da liegst Du vollkommen richtig, in der Regel werden mit eingebunden, aber nicht alle, wie du andeutest.
CustomCSSforFx/current/css/buttons/buttons_on_navbar_classic_appearance.css at master · Aris-t2/CustomCSSforFxCustom CSS tweaks for Firefox. Contribute to Aris-t2/CustomCSSforFx development by creating an account on GitHub.github.com -
Verstehe ich nicht so ganz; base64 ist langsamer an sich, oder mit Code eingebettete Icons generell?
Alles, was als base64 kodiert ist, muss auch wieder dekodiert werden. Und das jedes Mal, wenn es angezeigt wird, da ist kein Caching möglich. Das ist deutlich langsamer und beansprucht die CPU mehr als Grafiken direkt anzuzeigen.
-
Alles, was als base64 kodiert ist, muss auch wieder dekodiert werden. Und das jedes Mal, wenn es angezeigt wird, da ist kein Caching möglich. Das ist deutlich langsamer und beansprucht die CPU mehr als Grafiken direkt anzuzeigen.
Verstehe, dankeschön!
-
ich vermute du hast evtl. CSS am Laufen das die Icongrösse für manche Buttons ändert, aber nicht für alle.
Da liegst Du vollkommen richtig, in der Regel werden mit eingebunden, aber nicht alle, wie du andeutest.
Da seh ich aber nix bzgl. Grössen, oder ich bin blind.
Das Aris Monster - genial wie es ist - hab ich aber schon zu oft durchgekämmt um das nochmal zu machen.
Eine komplett wilde Idee wäre in dem Fall das Icon in einer CSS Datei - am besten vielleicht unten in deiner userChrome.css - anzugeben, und damit das Icon im Script zu umgehen.
Also sowas, angenommen dein Icon ist in einem Ordner namens icons im chrome Ordner:
CSS#profileschange-button .toolbarbutton-icon { list-style-image: url("icons/DeinIcon.png") !important; }
Könnte sein dass dann deine anderen Einstellungen für Icons auch für dieses Bild greifen, ohne zusätzliche Grössenangaben.
Aber wie gesagt, wenn es auch anders funktioniert ist das ja auch ok, also muss man sich den Aufwand vielleicht nicht machen.
-
Das Aris Monster - genial wie es ist - hab ich aber schon zu oft durchgekämmt um das nochmal zu machen.
Die Version , die ich nutze, habe ich geändert, und immer so behalten (ohne Updates). Bisher selten mal ein Problemchen.
Könnte sein dass dann deine anderen Einstellungen für Icons auch für dieses Bild greifen, ohne zusätzliche Grössenangaben.
Danke, das schaue ich mir dann an.
-
So dann hier die neue und aktuelle Version meines "Button-um-weiteres-Profil-zu-öffnen-Skripts".
JavaScript
Alles anzeigen// JavaScript Document // QuickProfilesChangesButton.uc.js // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231647#post1231647 // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1232240#post1232240 // Version 1.07 from August 3, 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'); toolbaritem.onclick = event => onClick(event); 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: 'Profile Changer', }; 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 = "user-group_2.svg"; // Name & Dateiendung des anzuzeigenden Symbols! var css =` #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") } `; var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET); function onClick(event) { if (event.button != 0){ return; } let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-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 } })();
Nur mal für ganz Langsame wie mich: das hier ist wohl inzwischen überholt, und Zeile 31 ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); - mit PathUtils - funktioniert also, auch in den aktuellen Nightlys?
Ärgerlicherweise kann ich Nightlys nicht mehr benutzen auf der alten Mackiste, möchte nur weitmöglichst meine Scripts aktuell halten.
-
Äh, wie soll ich das nun erklären?
Also, so wie das "alte" Skript gestrickt war, Version 1.05 vom 27. Juli, funktionierte
ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
nicht mehr!
Als Zwischenlösung ersetzte ich diese Variable durch
ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");.
Jedoch mussten dadurch die Ordner chrome & icons anders eingebunden werden.
Das gefiel mir nicht
Du
hattest mich aber auf eine Idee gebracht!
CSS!
Ich nutze ja auch ein anderes Skript, um alle Menüs mit Symbolen zu erweitern,
in diesem Skript wird aber weiterhin
ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
genutzt, aber
die Variable wird eben in CSS-Teil des Skriptes aufgerufen
Und es funktioniert.
Also,
habe ich im neuen Skript, Version 1.07 vom August 3, CSS-Code "eingeschmuggelt", um wieder die
alte Möglichkeit der Variable nutzen zu können.
Ich bin mir auch nicht sicher, ob ich es dabei belasse.
Es ergibt m.M. absolut keinen Vorteil an dieser Methode.
Eventuell kehre ich doch wieder auf die andere Methode zurück.
Um noch einmal die Unterschiede zu verdeutlichen:
Alte, nicht mehr funktionierende Version.
JavaScriptlet ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); let buttonicon = "bookmark-hollow.svg"; let props = { style: "list-style-image: url('" + ProfilePath + buttonicon + "');" };
Die Zwischenlösung:
JavaScriptlet currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); let buttonicon = "bookmark-hollow.svg"; let props = { style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) +'");', };
Die jetzige Lösung:
JavaScriptlet ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); let ButtonIcon = "user-group_2.svg"; var css =` #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") } `; var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
Beachte die Zeilen mit Nummer 4.
--------------------------------------------------------------------------------------------------------------------------------------------------------
Nachtrag
Mir fiel gerade doch ein klitzekleiner Vorteil ein!
Man kann direkt im CSS-Teil des Skriptes, z.B. dir Größe genau dieses Symbols beeinflussen
und hat dann alles in einem Code.
-
Äh, wie soll ich das nun erklären?
Prima erklärt, herzlichen Dank für die Mühe!
Ich wollte v.a. sicher gehen, dass PathUtils nicht generell Probleme macht in neueren Fx Versionen.
Ich bastle immer noch ein bisschen an unserer alten Baustelle herum, ich vermute dass damit alles iO sein sollte bzgl. der Dateipfade, da wird ja CSS im Script benutzt wie in deinem aktuellen Beispiel.
-
Man kann direkt im CSS-Teil des Skriptes, z.B. dir Größe genau dieses Symbols beeinflussen
und hat dann alles in einem Code.
Ja, das kann man, mit dem Nachteil, dass sich der gesamte Button dann mit vergrößert. Nun habe ich versucht über Größenanpassungen das zu ändern, aber automatisch verkleinert sich dann auch das icon wieder. Im Moment habe ich noch keine Lösung dafür.
Bei dem Script addons-update-button.uc.js verhält es sich auch so, die anderen machen da keine Probleme.
-
-
Und mit diesem Eintrag?
Ja, das Icon vergrößert sich, aber auch der Button insgesamt. Da greifen dann auch keine margin-Werte.
-
Ja, das kann man, mit dem Nachteil, dass sich der gesamte Button dann mit vergrößert. Nun habe ich versucht über Größenanpassungen das zu ändern, aber automatisch verkleinert sich dann auch das icon wieder. Im Moment habe ich noch keine Lösung dafür.
Bei dem Script addons-update-button.uc.js verhält es sich auch so, die anderen machen da keine Probleme.
Äh, mit dem Code von 2002Andreas bleibt der Button in seiner Größe!
Es wird nur das Symbol angesprochen!
Mach doch mal bitte ein "Foto", vor der Benutzung, nach der Benutzung des Codes.
Bitte.
AH, halt, Kommando zurück!
Ich habe für die Buttons noch ein extra CSS am Laufen.
Schaumal was daraus Du gebrauchen kannst.
CSS
Alles anzeigen#nav-bar .toolbarbutton-1, #toolbar-menubar .toolbarbutton-1 { margin: 2px 3px 3px!important; min-height: 30px !important; max-height: 30px !important; min-width: 30px !important; max-width: 30px !important; border-radius: 50% !important; background-position: center !important; background: linear-gradient(155deg, rgba(0, 0, 0, 0.25), rgba(255, 255, 255, 0.25) ); box-shadow: -1px -1px 2px rgba(255,255,255, 0.25), 2px 2px 2px rgba(0, 0, 0, 0.25); filter: contrast(110%) brightness(90%) !important; transition: filter 0.33s, box-shadow 0.33s !important; } #nav-bar .toolbarbutton-1:hover:not([disabled="true"]), #toolbar-menubar .toolbarbutton-1:hover:not([disabled="true"]) { filter: contrast(120%) brightness(100%) !important; } #nav-bar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]), #toolbar-menubar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]) { border-radius: 50% !important; background: linear-gradient(145deg, rgba(0,0,0,.5), rgba(48,48,48,.5), rgba(108,108,108,0.5) ) !important; box-shadow: 0px 0px 1px rgba(255,255,255,.25) !important; } #nav-bar .toolbarbutton-1 .toolbarbutton-icon, #toolbar-menubar .toolbarbutton-1 .toolbarbutton-icon, #nav-bar .toolbarbutton-1 .toolbarbutton-badge-stack, #toolbar-menubar .toolbarbutton-1 .toolbarbutton-badge-stack { background: transparent !important; filter: drop-shadow( 1px 1px 1px rgba(25,25,25,.75)) !important; transition: fill 0.33s, filter 0.33s, transform .33s !important; } #nav-bar .toolbarbutton-1:not([open]):hover:not([disabled="true"]) .toolbarbutton-icon, #toolbar-menubar .toolbarbutton-1:not([open]):hover:not([disabled="true"]) .toolbarbutton-icon, #nav-bar .toolbarbutton-1:not([open]):hover:not([disabled="true"]) .toolbarbutton-badge-stack #toolbar-menubar .toolbarbutton-1:not([open]):hover:not([disabled="true"]) .toolbarbutton-badge-stack { filter: drop-shadow( 1px 1px 1px rgba(25,25,25,1.00)) drop-shadow( -1px -1px 3px rgba(200,200,200, 0.5)) brightness(120%) !important; transition: fill 0.33s, filter 0.33s, transform .33s !important; } #nav-bar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]) .toolbarbutton-icon, #toolbar-menubar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]) .toolbarbutton-icon, #nav-bar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]) .toolbarbutton-badge-stack, #toolbar-menubar .toolbarbutton-1:hover:not([disabled="true"]):active:not([disabled="true"]) .toolbarbutton-badge-stack { fill: rgba(0,207,229,1) !important; filter: drop-shadow( 1px 1px 1px rgba(25,25,25,.75)) drop-shadow( -1px -1px 3px rgba(0,207,229,1)) brightness(120%) !important; transform: translate(0px,1px) !important; } #nav-bar .toolbarbutton-1[open] .toolbarbutton-icon, #toolbar-menubar .toolbarbutton-1[open] .toolbarbutton-icon, #nav-bar .toolbarbutton-1[open] .toolbarbutton-badge-stack, #toolbar-menubar .toolbarbutton-1[open] .toolbarbutton-badge-stack { fill: rgba(0,207,229,1) !important; filter: drop-shadow( 1px 1px 1px rgba(25,25,25,.75)) drop-shadow( -1px -1px 3px rgba(0,207,229,1)) brightness(120%) !important; transform: translate(0px,0px) !important; }
Du kannst mit diesem CSS-Code dann Dir die Buttons so gestalten wie Du es möchtest.
-
aber auch der Button insgesamt.
Eigentlich ja auch zu erwarten
Sind die Icons evtl. zu klein, hast du es mal mit anderen getestet?
-