Hier funktioniert es!
Alle drei Skripte, absolut ohne Probleme.
Hier leider nicht, erst wenn ich aus meinem Script den letzten Teil ab hier _externalAppPopup: null, ersetze. Dann funktioniert es, muss natürlich auch angepasst werden.
Hier funktioniert es!
Alle drei Skripte, absolut ohne Probleme.
Hier leider nicht, erst wenn ich aus meinem Script den letzten Teil ab hier _externalAppPopup: null, ersetze. Dann funktioniert es, muss natürlich auch angepasst werden.
Habe ja das Appmenü komplett abgespeckt.
Es bestehen ja nur noch zwei Untermenüs
und zwar "Firefox Verzeichnisse" und "Firefox Funktionen".
Abgeteilt darunter der Menüpunkt "Neustart" und "Beenden".
Danke, habe ich mal installiert, wird angezeigt, ist aber für Nightly nicht angepasst, da keine Reaktion.
Ich hattee mir extra Firefox 135 Beta 9 neu heruntergeladen, da ich ansonsten überhaupt keine Beta-Version nutze, und das Update auf den RC 1 getestet.
Ist alles gut möglich, eine Version hat keinerlei Anpassungen erhalten, und trotzdem trat das Problem hier auf.
Hinzufügen muss ich aber, Beta-Versionen verwende ich nur als portable. Ob das jetzt ursächlich dafür ist, kann ich nicht nachvollziehen.
Ein Restart per Skript reicht dafür nicht aus.
Siehst Du, darauf habe ich noch nicht geachtet. Aber trotzdem ist da wohl etwas Sand im Getriebe.
Kann das jemand bestätigen?
Sorry, Andreas, das habe ich jetzt erst gelesen. Genau so verhält es sich, auch beim heutigen Update auf 135.0.
Das geht nun schon eine Weile so, aber komisch ist schon, irgendwann bietet er trotzdem das nächst höhere Update an.
Hängt also nicht an den Toolbars bzw. halte ich für sehr unwahrscheinlich.
Ich wiederhole mich mal, es betrifft ja nur die about-Funktionen. Konsole, Einstellungen, Entwicklerwerkzeuge, alle sind nach dem Muster gefertigt, die funktionieren. Also sage ich mal als Stümper, da fehlt was in den betreffenden Scripten.
Jetzt habe ich neuen Anlauf genommen, und ein Script von Aris umgebastelt, läuft in allen Fenstern, wenn Startfenster geschlossen ist, und funktioniert auch überall in der Addonbar. Könnte für Vergleichbares durchaus genutzt werden.
Hier mal das about:translations als Beispiel.
// 'about'-Button script for Firefox by Aris
// https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/about_button_generic.uc.js
// 29.01.2025 editiert für about:translations von @FuchsFan
(function() {
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 = "Translations Button (generic)";
const open_in_a_window = false;
CustomizableUI.createWidget({
id: "about-button-translations",
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("about:translations");
else
win.gBrowser.selectedTab = win.gBrowser.addTrustedTab('about:translations');
} catch (e) {}
}
},
onCreated: function(button) {
return button;
}
});
// style button icon
const uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
\
#about-button-translations .toolbarbutton-icon {\
list-style-image: url("file:///C:/FoxIcons2/1140.png"); /* icon / path to icon */ \
/* fill: dimgray; */ /* icon color name/code */\
}\
\
'), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
} catch (e) {
Components.utils.reportError(e);
};
})();
Alles anzeigen
Siehe Screenshot in #13
Ich glaube Dir ja schon, aber alle Button, die about-Funktionen aufrufen funktionieren nicht nach dem Muster des Scriptes aus #11.
Alle anderen funktionieren tadellos, und immer nach dem gleichen Muster erstellt.
Gibst Du mir mal bitte noch Dein Script für die Addon-Bar.
Funktioniert hier in der FF134.0.2 einwandfrei. Keine Ahnung, was du meinst
Sorry, ich teste nur in Nightly (immer aktuelle Version).
Du musst da überhaupt nichts anpassen oder in das Skript eintragen, da diese Buttons weiterhin in allen Toolbars funktionieren. Oder habe ich dich falsch verstanden?
Leider nicht, denn das folgende Script arbeitet in der Navbar fehlerlos, und funktioniert auch in mehreren Fenstern, wenn das Startfenster geschlossen wurde (das aus #5 nicht). Was müsste also im Script noch geändert werden?
// abouttranslations-button.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'about-translations',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'about-translations',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
label: 'about:translations',
tooltiptext: 'about:translations öffnen',
style: 'list-style-image: url("file:///C:/FoxIcons2/1140.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
CustomizableUI.registerToolbarNode(tb);
} catch(e) { };
document.getElementById('about-translations').addEventListener('click', event => {
if (event.button === 0) {
openTrustedLinkIn("about:translations", "tab");
}
});
})();
Alles anzeigen
oder meinst Du Z.B. den Translation-Button in der Urlbar?
Nein, sondern per Script erstellte Button dafür, die in der Navbar platziert sind, und dann über Anpassen in die Addonbar verschoben werden.
Hier das versprochene Skript, welches die vorherige Funktionalität ( <FF133) für alle Buttons wiederherstellt, welche ab FF134 nicht mehr auf einen Mausklick reagiert haben.
Danke, das funktioniert mit den von Dir eingetragenen System-Button. Ich musste passen, konnte es nicht fertig bringen, dass auch z.B. about-config-Button, about-translations-Button, usw., starten, wenn sie sich in der Addonbar befinden (Nightly aktuell).
Wie müsste so ein Eintrag aussehen?
Interessant wäre es gewesen, wenn du auch mitgeteilt hättest, ob der Button bei dir mit dieser Anpassung funktioniert.
Hier funktioniert es leider nicht mit dem Button.
Könntest Du zwecks Vergleich mal ein 'einfaches' Script hier reinstellen?
Ich bin zwar nicht angesprochen, aber hier mal das Restart-Script angepasst.
// Button für Neustart des Browsers
// Das Script erstellt einen Button, der Firefox neu startet.
// Linksklick: Neustart - OHNE löschen Js-Cache \ Mittelklick: Neustart - MIT löschen Js-Cache \ Rechtsklick: Neustart - MIT löschen Js-Cache.
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'Restart-Button',
type: 'custom',
defaultArea: CustomizableUI.AREA_MENUBAR,
onBuild: function(aDocument) {
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'Restart-Button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: true,
label: 'Restart Firefox',
tooltiptext: 'Firefox neu starten / Mittel- oder Rechtsklick löscht JS-Cache',
style: 'list-style-image: url("file:///C:/FoxIcons2/restart2.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
CustomizableUI.registerToolbarNode(tb);
} catch(e) { };
document.getElementById('Restart-Button').addEventListener('click', event => {
if (event.button === 0) {
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
}
else
if (event.button == 1 || event.button == 2) {
Services.appinfo.invalidateCachesOnRestart();
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
}
});
})();
Alles anzeigen
...oder um das Menü Einstellungen zu öffnen
// Button öffnet Menü Einstellungen
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'Open-Preferences-Button',
type: 'custom',
defaultArea: CustomizableUI.AREA_MENUBAR,
onBuild: function(aDocument) {
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'Open-Preferences-Button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: true,
label: 'Einstellungen öffnen',
tooltiptext: 'Einstellungen öffnen',
style: 'list-style-image: url("file:///C:/FoxIcons/0031.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
CustomizableUI.registerToolbarNode(tb);
} catch(e) { };
document.getElementById('Open-Preferences-Button').addEventListener('click', event => {
if (event.button === 0) {
openTrustedLinkIn("about:preferences", "tab");
}
});
})();
Alles anzeigen
Du hast ja nun die Probleme , die auch mein Script verursacht, sicherlich aufgenommen.
Ich stelle hier noch ein verändertes Script ein, dass dann in allen Fenstern funktioniert, auch wenn das Startfenster geschlossen wird. Dein Icon musst Du dann noch selbst eintragen.
// Button für Browser-Konsole
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
const konsole = 'konsole_button';
try {
CustomizableUI.createWidget({
id: 'konsole',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'konsole',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
label: 'Browser-Konsole',
tooltiptext: 'Browser-Konsole',
style: 'list-style-image: url("chrome://global/skin/icons/developer.svg")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
CustomizableUI.registerToolbarNode(tb);
} catch(e) { };
document.getElementById('konsole').addEventListener('click', event => {
if (event.button === 0) {
starten();
}
});
function starten() {
var document = event.target.ownerDocument;
if (!document.getElementById('menu_browserConsole')) {
let { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs", {});
require("devtools/client/framework/devtools-browser");
};
document.getElementById('menu_browserConsole').click();
};
})();
Alles anzeigen
im verbleibenden F. funktioniert kein Button, bis auf: extras_config_menu.uc.js,
Und außerdem das Script Appmenu.uc.js, von dem aus dann auch alle Funktionen in den restlichen Fenstern gestartet werden können.
Den Startcache habt ihr aber schon gelöscht vor/bei dem Testen?
Das wäre das Einzige was mir noch einfällt...
Alles gemacht, will trotzdem nicht.
Mal ganz grob, probier das evtl. mal aus (benutzt dein Icon und Iconpfad):
Das funktioniert so leider nicht.
Hier ist das alte Problem: wenn das zuerst (bei Programmstart) geöffnete Fx Fenster geschlossen wurde - falls man mit mehreren Fenstern arbeitet - funktioniert dieser Scriptaufbau nicht mehr
Das stimmt allerdings!
von meiner Seite (Mac) gesehen ist es trotzdem ein Basisfehler im Script, und nicht nur in diesem Exemplar.
Das stimmt dann allerdings auch.
Nun bitte ich dich in aller Höflichkeit, zeige mir an meinem oben eingestellten Code, wie das dort eingearbeitet werden kann.
Mein Dank ist dir gewiss.
Also ich hatte mir nur den Update-Code an meine Skriptversion drangehängt. Die beiden Symbole funktionierten immer noch nicht. Habe jetzt das aktuelle von Aris getestet, da erscheint gar nichts mehr, weder Leiste, noch Button, noch der Leisteneintrag im Anpassen-Fenster.
Dann probiere mal dieses hier, in dem habe ich die ältere Version mit dem Code der neueren teilweise angeglichen, und es wird auch der Button angezeigt. Das Problem ist aber damit auch nicht gelöst.
// Add-on Bar script for Firefox 102+ by Aris
//
// no 'close' button
// 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS
// no 'Add-on Bar' entry in toolbar context menu
//
// option: smaller buttons / reduced toolbar button height
//
// flexible spaces on add-on bar behave like on old Firefox versions
// [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts)
var appversion = parseInt(Services.appinfo.version);
var compact_buttons = false; // reduced toolbar height and smaller buttons
var AddAddonbar = {
init: function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
/* blank tab workaround */
try {
if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank');
} catch(e) {}
try {
Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true);
} catch(e) {}
var addonbar_label = 'Add-on Bar';
var compact_buttons_code = '';
var h_button_label = 'Toggle horizontal Add-on Bar'; // Toggle button name
if(compact_buttons)
compact_buttons_code = `
#addonbar toolbarbutton .toolbarbutton-icon {
padding: 0 !important;
width: 16px !important;
height: 16px !important;
}
#addonbar .toolbarbutton-badge-stack {
padding: 0 !important;
margin: 0 !important;
width: 16px !important;
min-width: 16px !important;
height: 16px !important;
min-height: 16px !important;
}
#addonbar toolbarbutton .toolbarbutton-badge {
margin-top: 0px !important;
font-size: 5pt !important;
min-width: unset !important;
min-height: unset !important;
margin-inline-start: 0px !important;
margin-inline-end: 0px !important;
}
#addonbar .toolbaritem-combined-buttons {
margin-inline: 0px !important;
}
#addonbar toolbarbutton {
padding: 0 !important;
}
`;
// style sheet
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet(
Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring],
#addonbar toolbarspring {
-moz-box-flex: 1 !important;
min-width: unset !important;
width: unset !important;
max-width: unset !important;
}
#main-window[customizing] #addonbar {
outline: 1px dashed !important;
outline-offset: -2px !important;
}
#addonbar {
border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important;
/* background-color: var(--toolbar-bgcolor);
background-image: var(--toolbar-bgimage); */
-moz-window-dragging: no-drag !important;
}
:root[lwtheme] #addonbar {
background: var(--lwt-accent-color) !important;
}
:root[lwtheme][lwtheme-image='true'] #addonbar {
background: var(--lwt-header-image) !important;
background-position: 0vw 50vh !important;
}
/* autohide add-on bar in fullscreen mode */
/*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar {
visibility: visible !important;
display: block !important;
min-height: 1px !important;
height: 1px !important;
max-height: 1px !important;
}
#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover {
min-height: 24px !important;
height: 24px !important;
max-height: 24px !important;
}*/
#togglebutton_addonbar_h .toolbarbutton-icon { \
list-style-image: url('chrome://browser/skin/sidebars.svg');
fill: green;
transform: rotate(270deg);
}
`+compact_buttons_code+`
`), null, null),
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET
);
// toolbar
try {
if(document.getElementById('addonbar') == null) {
var tb_addonbar = document.createXULElement('toolbar');
tb_addonbar.setAttribute('id','addonbar');
tb_addonbar.setAttribute('collapsed', 'false');
tb_addonbar.setAttribute('toolbarname', addonbar_label);
tb_addonbar.setAttribute('defaultset','spring,spring');
tb_addonbar.setAttribute('customizable','true');
tb_addonbar.setAttribute('mode','icons');
tb_addonbar.setAttribute('iconsize','small');
tb_addonbar.setAttribute('context','toolbar-context-menu');
tb_addonbar.setAttribute('lockiconsize','true');
tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
document.getElementById('browser').parentNode.appendChild(tb_addonbar);
CustomizableUI.registerArea('addonbar', {legacy: true});
setTimeout(function(){
CustomizableUI.registerArea('addonbar', {legacy: true});
},2000);
CustomizableUI.registerToolbarNode(tb_addonbar);
// 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar
var key = document.createXULElement('key');
key.id = 'key_toggleAddonBar';
key.setAttribute('key', '/');
key.setAttribute('modifiers', 'accel');
key.setAttribute('oncommand',`
/* var windows = Services.wm.getEnumerator(null);
while (windows.hasMoreElements()) {
var win = windows.getNext();
var hAddonBar = win.document.getElementById('addonbar');
setToolbarVisibility(hAddonBar, hAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!hAddonBar.collapsed);
if(!hAddonBar.collapsed)
win.document.querySelector('#togglebutton_addonbar_h').setAttribute('checked','true');
else win.document.querySelector('#togglebutton_addonbar_h').removeAttribute('checked');
} */
var newAddonBar = document.getElementById('addonbar');
setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);
`);
document.getElementById('mainKeyset').appendChild(key);
try {
setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'));
} catch(e) {}
CustomizableUI.createWidget({
id: 'togglebutton_addonbar_h', // button id
defaultArea: CustomizableUI.AREA_NAVBAR,
removable: true,
label: h_button_label, // button title
tooltiptext: h_button_label, // tooltip title
onClick: function(event) {
if(event.button==0) {
var windows = Services.wm.getEnumerator(null);
while (windows.hasMoreElements()) {
var win = windows.getNext();
var hAddonBar = win.document.getElementById('addonbar');
setToolbarVisibility(hAddonBar, hAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!hAddonBar.collapsed);
if(!hAddonBar.collapsed)
win.document.querySelector('#togglebutton_addonbar_h').setAttribute('checked','true');
else win.document.querySelector('#togglebutton_addonbar_h').removeAttribute('checked');
}
}
},
onCreated: function(button) {
if(Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'))
button.setAttribute('checked','true');
return button;
}
});
}
} catch(e) {}
}
}
/* initialization delay workaround */
document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false);
/* Use the below code instead of the one above this line, if issues occur */
Alles anzeigen
Habe mir das Icon noch angepasst! Vielen Dank!
Ich war mal so frei, und habe das für ihn gemacht
Sehr gut!
Evtl. kann Endor den ja dann bei sich hochladen.
Endor hatte ich schon per PN auf Basis des im Script genannten Codes drei Scripte vorgestellt, dieses war noch nicht dabei.
Und es gibt inzwischen schon ein paar andere Scripte.
Mal sehen, was Endor dazu sagt.