Und wie ich schon einmal schrieb, schau in die Konsole,
da wird mit Sicherheit ein Fehler angezeigt!
Die Fehlermeldung hätte ich gerne. Als Screen?
Und wie ich schon einmal schrieb, schau in die Konsole,
da wird mit Sicherheit ein Fehler angezeigt!
Die Fehlermeldung hätte ich gerne. Als Screen?
Wieso macht man so einen Blödsinn, sich als Nutzer veralteter Browser auszugeben?
Ja , stimmt. Ein Update des AddOns mit aktuellen Browsersignaturen wäre wünschenswert.
wenn man Browserentwickler ist.
Du meintest sicherlich Websiteentwickler, Webdesigner oder auch Onlinedesigner.
Mit welcher Firefox Version hast du das denn getestet? Laut deinem User-Agenten hattest du eben Fx 130.
Selbstverständlich 136.01 und jetzt sollte der UserAgent Windows/Chrome128 anzeigen...
EDIT: du testet auf 137/138; nun verstehe ich auch deine Frage...Hier läufts auf 136.01, eine andere Testmöglichkeit habe ich leider nicht
EDIT2: Das AddOn ist hier kontraproduktiv, deshalb habe ich dieses Forum auf die Whitelist gesetzt, mein Fehler...
Und wie ich schon einmal schrieb, schau in die Konsole,
da wird mit Sicherheit ein Fehler angezeigt!
Hier nicht. Ist aber auch egal...Hier funzt es so mit allen Verschiebescripts
(PanelUI-button, nav-bar-overflow-button, unified-extensions-button) einwandfrei. Hättest Du mal einen Screen von der Fehlermeldung?
//B_Move_Extensions.uc.js
(function() {
if (!window.gBrowser) return;
/* Konfiguration */
const origID = "unified-extensions-button",// ID des originalen Buttons
label = "Erweiterungen",
tooltiptext = "Erweiterungen-Button";
/* Ende Konfiguration */
const menuButton = document.getElementById(origID),
buttonID = 'ucjs_' + origID;
if (!CustomizableUI.getPlacementOfWidget( buttonID )) {
try {
CustomizableUI.createWidget({
id: buttonID,
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
toolbaritem.id = buttonID;
toolbaritem.className = 'chromeclass-toolbar-additional';
// toolbaritem.setAttribute('label', label);
return toolbaritem;
}
});
} catch(e) {
menuButton.style.display = 'none';
return;
};
};
setTimeout(function() {
document.getElementById(buttonID).appendChild(menuButton);
menuButton.setAttribute('consumeanchor', buttonID);
menuButton.setAttribute('label', label);
menuButton.setAttribute('tooltiptext', tooltiptext);
}, 0);
}());
Alles anzeigen
Das spielt keine Rolle, wie oft die Variable verwendet wird. Wenn du die Variablen-Deklaration in Zeile 7 löschst, was du ja machst, wenn du die Zeile auskommentierst, hast du einen Script-Fehler, sobald du diese verwendest.
Ja, ist klar.
Beide Zeilen (24 und 37) bewirken das gleiche. Also könnte eine gelöscht werden?
Genau Zeile 24 (siehe Beitrag #49) führt bei mir eben zum Verschwinden des Buttons...???
Wenn gelöscht, dann eben nicht; ich empfinde das als schon als sehr merkwürdig.
Ich beziehe mich auf diesen Post:
Ich hatte auch zwischenzeitlich wieder einen Zustand, wo der Button wie beim TE ganz verschwunden war.
Danke für den Tip! Und lies bitte nochmal #49.
Die Variable wird zweimal angewendet: In Zeile 24 sowie in Zeile 37.
Auch die 'Verschiebescripte' haben noch einen Fehler: Wenn das label in Zeile 7 auskommentiert ist, verschwindet der Button. Das liegt wiederum am label in Zeile 24. Wird die Zeile gelöscht, funzt das Script auch ohne Label in Zeile 7 einwandfrei.
Referenz für die Zeilennummern:
//B_Move_Extensions.uc.js
(function() {
if (!window.gBrowser) return;
/* Konfiguration */
const origID = "unified-extensions-button",// ID des originalen Buttons
label = "Erweiterungen",
tooltiptext = "Erweiterungen-Button";
/* Ende Konfiguration */
const menuButton = document.getElementById(origID),
buttonID = 'ucjs_' + origID;
if (!CustomizableUI.getPlacementOfWidget( buttonID )) {
try {
CustomizableUI.createWidget({
id: buttonID,
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
toolbaritem.id = buttonID;
toolbaritem.className = 'chromeclass-toolbar-additional';
toolbaritem.setAttribute('label', label);
return toolbaritem;
}
});
} catch(e) {
menuButton.style.display = 'none';
return;
};
};
setTimeout(function() {
document.getElementById(buttonID).appendChild(menuButton);
menuButton.setAttribute('consumeanchor', buttonID);
menuButton.setAttribute('label', label);
menuButton.setAttribute('tooltiptext', tooltiptext);
}, 0);
}());
Alles anzeigen
Lieber milupo , der .tab-audio-button befindet sich im shadow-root-Bereich. Also gibt es nur eine Lsg. über userChromeShadow.css; ein Teil befindet sich aber außerhalb dieses Bereiches; eine Lsg. die beide Bereiche bedient ist also: Die oben genannte Datei (so kompliziert sich der text auch liest!) in eine .us.js-Datei einzugliedern. Hast du was Besseres?
Gibts auch für das schon was?
Wenn dir das alles zu kompliziert ist, setze doch das css einfach in eine .uc.js, ungefähr so (Damit wäre der gesamte Quelltext an einem Ort):
// TabIconSound.css.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
IconPath1 = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image', 'ff_svg')), // Pfad zum 1.Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
IconPath2 = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')), // Pfad zum 2.Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
IconPath3 = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum 3.Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
const sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
const uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
.tab-audio-button {
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
&[soundplaying]::part(button) {
background-image: url("${IconPath2}/16_volume-up_moz.svg") !important;
}
}
}
.tab-audio-button:hover {
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
&[soundplaying]::part(button) {
background-image: url("${IconPath2}/16_volume-off_moz.svg") !important;
}
}
}
.tab-audio-button {
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
&[muted]::part(button) {
background-image: url("${IconPath2}/16_volume-off_moz.svg") !important;
}
}
}
.tab-audio-button:hover {
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
&[muted]::part(button) {
background-image: url("${IconPath2}/16_volume-up_moz.svg") !important;
}
}
}
.tab-audio-button {
&[soundplaying]::part(button) {
fill: green !important;
}
}
.tab-audio-button {
&[muted]::part(button) {
fill: red !important;
}
}
.tab-audio-button:hover {
&[soundplaying]::part(button) {
fill: red !important;
background-color: lightgray !important;
}
}
.tab-audio-button:hover {
&[muted]::part(button) {
fill: green !important;
background-color: lightgray !important;
}
}
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) .tabbrowser-tab:not([pinned]):not([crashed]):is([soundplaying], [muted], [activemedia-blocked]) {
.tab-content .tab-icon-image {
display: none;
}
.tab-audio-button {
--button-size-icon-small: 18px !important;
--button-min-height-small: 18px !important;
margin: auto 2px auto -20px !important;
transform: translateY(-2px);
}
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
})();
/*Der Letzte räumt den Quellcode auf*/
Alles anzeigen
Beispielicons:
Ich bin hier auf eine interessante Lsg. gestoßen;
/* hide favicon when audio is playing (like FF 135) */
#tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) .tabbrowser-tab:not([pinned]):not([crashed]):is([soundplaying], [muted], [activemedia-blocked]) {
.tab-content .tab-icon-image {
display: none;
}
.tab-audio-button {
--button-size-icon-small: 18px !important;
--button-min-height-small: 18px !important;/**/
margin: auto 2px auto -20px !important;
transform: translateY(-1.5px);
}
}
Alles anzeigen
Nach etwas Justierung ersetzt der .tab-audio-button das .tab-icon-image ganz ohne 'geflacker', Die Farbe muß - wie gehabt - angepasst werden.
Mir zumindest ist nichts bekannt.
Das ist das ist einzige Script, dass nach dem Update auf 136 bei mir nicht mehr funktioniert.
RIP 03/2025
auf 136.0 upgedatet
Diesen Button habe ich mal für mich selbst geschrieben, funzt auch in 136:
EDIT: zeitgleicher Post mit Andreas; damit ist dieser Beitrag überflüssig.
// JavaScript Document
// B_Quit_Firefox.uc.js
// Das Script erstellt einen Button, der ein einzelnes Firefox-Fenster separat schließt (Linksklick) oder Firefox beendet (Mittel-/Rechtsklick). Das .svg-Icon kann - je nach Hover-Zustand - mit zwei unterschiedlichen Farben gefüllt werden [fill]. Beim Überfahren des Buttons rotiert das Icon um 180deg [rotate: 180deg].
// Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
(function() {
if (!window.gBrowser)
return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
id = 'quit-button', // Id des neuen Buttons
label = 'Fenster schließen/Firefox beenden', // Bezeichnung des neuen Buttons
tooltiptext = 'Fenster schließen/Firefox beenden\n\nLinksklick: Fenster schließen\nMittel-/Rechtsklick: Firefox beenden',
// Icon-------------------------------------------------------
icon = 'quit-16.svg', // [Name.Dateiendung] des anzuzeigenden Symbols
iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
iconColOu = 'red', // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOu keine Funktion)
iconColOv = 'currentColor', // Farbe des Icons beim Überfahren des Buttons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOv keine Funktion)
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)),
cl = '.toolbarbutton-icon';
//const end
if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
}
//----
CustomizableUI.createWidget({
id: id,
type: 'button',
defaultArea: CustomizableUI.AREA_NAVBAR,
label: label,
tooltiptext: tooltiptext,
onCreated: (button) => {
button.style.MozContextProperties = 'fill, stroke, fill-opacity';
button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
button.style.fill = iconColOu;
//over
button.addEventListener('mouseover', () => {
button.style.fill = iconColOv;
button.querySelector(cl).style.rotate = '180deg';
});
//out
button.addEventListener('mouseout', () => {
button.style.fill = iconColOu;
button.querySelector(cl).style.rotate = '0deg';
});
//click
button.addEventListener('click', () => {
if (event.button === 0) {
event.target.ownerGlobal.BrowserCommands.tryToCloseWindow(event);
}
else
if (event.button === 1 || event.button === 2) {
event.target.ownerGlobal.goQuitApplication(event);
}
});
}
});
//----
})();
Alles anzeigen
Danke, auch für die Erklärung...
Das im Link abgesprochene Problem mit der deutschen Tastaturbelegung wurde durch die Verwendung von X11 anstatt Wayland als Fenstermanager behoben.
Habe gerade im Anmelde-'Bildschirm' umgestellt, nun passt es...
Aber ich bin unsicher welche Datei ich von FF als Starter verwenden soll; entweder firefox
oder firefox-bin ?
EDIT: Ich habe aus dieser Quelle installiert :https://www.mozilla.org/de/firefox/all…ase/linux64/de/
Linux Mint 22.1 Xia
Gerade installiert, hat bei mir Macken, z.B. https://forums.linuxmint.com/viewtopic.php?t=440060, usw., ist eben noch zu neu und 'wayland' funzt auch noch nicht...abwarten...