Deine Dateipfade für die Icons funktionieren nur sehr begrenzt
Funktionieren hervorragend.
Es ist nun mal:
ZitatEine andere Variante zum Beenden von Firefox.
Deine Dateipfade für die Icons funktionieren nur sehr begrenzt
Funktionieren hervorragend.
Es ist nun mal:
ZitatEine andere Variante zum Beenden von Firefox.
Eine andere Variante zum Beenden von Firefox.
// Fox beenden.uc.js
// beendet Firefox
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'foxBeenden',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'foxBeenden',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
label: 'Firefox beenden',
tooltiptext: 'Firefox beenden',
// Pfad zum Icon für ein ausgewähltes Verzeichnis
//style: 'list-style-image: url("file:///C:/FoxIcons2/beenden.png")',
// Pfad zum Icon im Profilordner im Verzeichnis chrome/icons
style: 'list-style-image: url("file:///G:/Firefox Test/Nightly22/Profilordner/chrome/icons/beenden.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { }
document.getElementById('foxBeenden').addEventListener('click', event => {
if (event.button === 0) {
goQuitApplication(event);
}
});
})();
Alles anzeigen
....das Icon
Das meinte ich.
Oder spricht etwas dagegen?
Dann müsstest du aber Zeilen 7 bis 9 auch so für dich ändern.
Zeilen 65 und 69 bitte die Ziffern tauschen.
Aber bitte keinen Stress deswegen, ich wollte/habe das Skript nur mal getestet.
Ich auch nur.
Aber hier hat das Icon keine andere Farbe
Hier schon, Andreas.
Zum Test habe ich den Code so umgebaut, dass ich auch einen anderen Ordner für Icons auswählen kann. Auch das "Ersatzicon" wird angezeigt. Schau es dir mal bitte an, ob es so zu gebrauchen ist.
// Button_Test.uc.js
// Öffnen des "Profilordners"
(function() {
if (location != "chrome://browser/content/browser.xhtml") return;
try {
CustomizableUI.createWidget({
id: 'buttonTest',
type: 'custom',
onBuild: function(aDocument) {
let toolbaritem = aDocument.createXULElement('toolbarbutton');
let props = {
id: 'buttonTest',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
label: 'buttonTest',
tooltiptext: 'Profil-Ordner öffnen',
};
for (var p in props) {
toolbaritem.setAttribute(p, props[p]);
}
return toolbaritem;
}
});
} catch(e){}
document.getElementById('buttonTest').addEventListener('click', event => {
if (event.button === 0) {
Services.dirsvc.get("ProfD", Ci.nsIFile).launch();
}
});
// Pfad zum Iconordner
let IconPath = "C:/FoxIcons/";
// Name & Dateiendung des anzuzeigenden Symbols!
let ButtonIcon = "gibtesnicht.png";
// Erstelle ein img-Element, um zu überprüfen, ob die Grafik geladen werden kann
let img = new Image();
img.src = "file:" + IconPath + ButtonIcon;
img.onload = function() {
// Wenn die Grafik geladen werden kann, setze das listStyleImage
document.getElementById('buttonTest').style.listStyleImage = 'url("' + ("file:" + IconPath + ButtonIcon) + '")';
};
img.onerror = function() {
// Wenn die Grafik nicht geladen werden kann, verwende das Fallback-Icon
document.getElementById('buttonTest').style.listStyleImage = 'url("chrome://browser/skin/fxa/avatar-empty.svg")';
};
})();
Alles anzeigen
Dann Fenster A schliessen, dann zusätzlich zu Fenster B noch ein Fenster C öffnen --> Fenster C hat Buttonfunktion, weil die Funktion nach unten bewegt wurde; Icons hat Fenster C keine, weil diese beiden Funktionen (Icon und Fallback) nicht bewegt wurden.
Nach deiner Vorlage habe ich nun meine Scripte umgebaut, genau so getestet, wie du es beschrieben hast, und es funktioniert in allen Fenstern ohne Probleme (wenn ich dich richtig verstanden habe).
Ich bedanke mich bei dir, und auch bei Mira_Belle, für diesen Lösungsvorschlag, gefällt mir.
Hier habe ich eines der Scripte, dass ich mir angepasst habe. Die Icon-Lösung habe ich neu eingefügt, weil sie hier in einem zentralen Verzeichnis (auf C:) hinterlegt sind. Teste es bitte mal, ob es nun deinen Vorstellungen entspricht. Fehler werden auch nicht angezeigt.
// Button_Verzeichnisse.uc.js
// Linksklick öffnet Profilordner
// Mittelklick öffnet Installationsordner
// Rechtsklick öffnet Ordner chrome
(function() {
if (!window.gBrowser)
return;
try {
CustomizableUI.createWidget({
id: 'buttonOrdner',
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: 'buttonOrdner',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: true,
// Name im AnpassungFenster
label: 'Ordner aufrufen',
// Name bei MausHover wenn in Symbolleiste
tooltiptext: 'Links Profilordner / Mitte Installationsordner / Rechts Ordner chrome',
style: 'list-style-image: url("file:///C:/FoxIcons2/ordner2.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
document.getElementById('buttonOrdner').addEventListener('click', event => {
if (event.button == 0) {
uProfMenu.prefDirOpen('ProfD');
}
if (event.button == 1) {
uProfMenu.prefDirOpen('CurProcD');
}
if (event.button == 2) {
Services.dirsvc.get("UChrm", Ci.nsIFile).launch();
}
});
})();
Alles anzeigen
Bzgl. about:about, das könnste mal probieren:
Danke, damit werde ich mich befassen.
Noch ein Nachtrag: die Lösungen, wenn sie denn auch für alle funktionieren, basieren auf vielen Diskussionen und Codevarianten aus diesem Forum; allen voran viele Beiträge von BrokenHeart zu diesem Thema.
![]()
Ja, das glaube ich dir gern, weil ich in der Regel mitlese. Ich betone "mitlese", denn wenn ihr eine Diskussion über diese Sachen beginnt, dann sind das für mich immer "Böhmische Wälder". Amateur bleibt Amateur.
oder soll ich sie schon ungefixt hier "vorstellen"?
Besser sie sind fertig nutzbar.
Für das Skript hier ein Ersatz.
Ich danke dir, aber wie müsste der Ablauf z.B. für about:about, oder auch Konsole aussehen, bekomme es nicht gebacken.
Ich meine, dass darüber im Forum schon "gesprochen" wurde.
Ja, das schon, aber ich war immer der Meinung, dass meine Scripte funktionieren, leider nicht.
Nicht bei mir
Stimmt, das habe ich nicht in der richtigen Reihenfolge gemacht.
Dann habe ich dieses noch, ist im Aufbau fast deinem ähnlich. Kannst ja mal probieren.
// Button zum Aufruf des Profil-Ordners
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
try {
ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
const sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
const button_label = "Profil Button (generic)";
const open_in_a_window = false;
CustomizableUI.createWidget({
id: 'Profil-Button',
defaultArea: CustomizableUI.AREA_NAVBAR,
removable: true,
label: button_label,
tooltiptext: button_label,
onClick: function(event) {
const win = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
if(event.button=='0') {
try {
if(open_in_a_window)
window.open("ProfD");
uProfMenu.prefDirOpen('ProfD');
} catch (e) {}
}
},
onCreated: function(button) {
return button;
}
});
// style button icon
const uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
\
#Profil-Button .toolbarbutton-icon {\
list-style-image: url("file:///C:/FoxIcons2/prof.png"); \
}\
\
'), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
} catch (e) {
Components.utils.reportError(e);
};
})();
Alles anzeigen
Die Lösung kommt von einem Amateur (mir), und könnte unvorhergesehene, aber von mir noch nicht beobachtete Probleme verursachen.
Gute Lösung, meine ich als absoluter Amateur, deswegen habe ich, so gut ich konnte, meine Scripte nach dieser Vorlage aufgebaut. Einfach und verständlich, und kann auf alle möglichen Button umgeschrieben werden. Außerdem funktionstüchtig in allen Fenstern, und die Konsole ist auch zufrieden.
// ButtonProfilordner.uc.js
// Öffnen des "Profilordners"
(function() {
if (!window.gBrowser)
return;
CustomizableUI.createWidget({
id: 'buttonProfilOrdner',
defaultArea: CustomizableUI.AREA_NAVBAR,
label: 'Profilordner öffnen',
tooltiptext: 'Profilordner öffnen',
onCreated: (button) => {
button.style.listStyleImage = 'url("file:///C:/FoxIcons2/prof.png")';
button.addEventListener('click', () => {
if (event.button == 0) {
uProfMenu.prefDirOpen('ProfD');
}
})
}
});
})();
Alles anzeigen
Hier noch ein Nachtrag. Zum Vergleich mal den Code für das Appmenu.uc.js, dort funktioniert es ohne Probleme, Selektoren fast identisch.
/*rechts der kleine Pfeil / neues Icon*/
#AppMenuButton menupopup#AMpopup menu.menu-iconic::after {
content: "" !important;
background-image: url("..//icons/rechts6.png") !important;
margin-right: 12px !important;
background-size: 18px 18px !important;
}
/*rechts der kleine Pfeil bei hover / neues Icon*/
#AppMenuButton menupopup#AMpopup menu.menu-iconic:hover::after {
content: "" !important;
background-image: url("..//icons/down2.png") !important;
margin-right: 12px !important;
display: block !important;
background-repeat: no-repeat !important;
background-position: 0px 3px !important;
background-size: 14px 14px !important;
}
Alles anzeigen
Nochmal die Frage: an welchem Punkt ist das Problem aufgetreten?
menu::after geht gar nicht
#ExtraConfigMenu-popup :is(#submenu-ucjs,#submenu-css,#submenu-cssweb,#submenu-cssabout,#submenu-cssshadow,#submenu-about,#submenu-extra2,#submenu-extra):hover::after { funktioniert bestens
#ExtraConfigMenu-popup [id^="submenu-"]:hover[open]::after { funktioniert mit kl. Verzögerung
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?
....damit:
#ExtraConfigMenu-popup [id^="submenu-"]:hover::after {
Auf deinen Wunsch hin habe ich dieses nochmal aufgeführt. Dass es jetzt solche Ausmaße angenommen hat konnte ich nicht ahnen. Mir ist hier geholfen worden, dafür bedanke ich mich bei allen herzlichst. Ich habe zwei Selektoren die ich einsetzen kann, und bin damit zufrieden (wenn es denn so bleibt).
Test die Version von
Ich glaube, Du bist da eine Zeile verrutscht.