habe mit dem Script aus #15 diesen Fehler nicht.
Das habe ich gar nicht gesehen, sondern nur die ersten drei Zeilen dieses Beitrags. Da war ich wohl zu fix. Ich teste also mit der Version des TE.
habe mit dem Script aus #15 diesen Fehler nicht.
Das habe ich gar nicht gesehen, sondern nur die ersten drei Zeilen dieses Beitrags. Da war ich wohl zu fix. Ich teste also mit der Version des TE.
Ja, aber dann ist der Eintrag #context_closeTabOptions wieder vorhanden (auch bei dem Script aus #15). Dieser müsste dann per css ausgeblendet werden. Das funzt, aber eine JS-Lsg. wäre vorzuziehen.
Der Fehler liegt in Zeile 10; ich habe das auch schon lt. MDN versucht, geht auch nicht:
const node = document.getElementById("context_closeTabOptions");
if (node.parentNode) {
node.parentNode.removeChild(node);
}
Dazu müsste man dann vielleicht einen Fachmann einbeziehen. Die unsaubere Lsg. wäre dann das (würde der Absicht de TE am nächsten kommen):
(function() {
if (!window.gBrowser)
return;
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context_closeLeftTabs';
menuitem.setAttribute('label', 'Linke Tabs schließen');
let tabContextMenu = document.getElementById('tabContextMenu');
let refItem = document.getElementById('context_closeTab');
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheStart'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
//click
menuitem.addEventListener('click', () => {
if (event.button == 0) {
for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--)gBrowser.removeTab(gBrowser.tabs[i], {animate: true});
}
});
/**/
var css =`
#context_closeTabOptions{ display:none !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);
})();
Alles anzeigen
Hallo,
wer kann das Script wieder zum laufen bringen
(function() {
if (!window.gBrowser)
return;
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context_closeLeftTabs';
menuitem.setAttribute('label', 'Linke Tabs schließen');
let tabContextMenu = document.getElementById('tabContextMenu');
let refItem = document.getElementById('context_closeTab');
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheStart'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
//tabContextMenu.removeChild(document.getElementById('context_closeTabOptions'));
//click
menuitem.addEventListener('click', () => {
if (event.button == 0) {
for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--)gBrowser.removeTab(gBrowser.tabs[i], {animate: true});
}
});
/**/
var css =`
#context_closeTabsToTheStart {
order: -1 !important;
}
#context_closeTabsToTheEnd {
order: -1 !important;
}
#context_closeOtherTabs {
order: -1 !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);
})();
Alles anzeigen
Das Script aus Beitrag #23 funktioniert bei mir garnicht.
Firefox 154.0
wer kann das Script wieder zum laufen bringen
Dieses funzt auch in der Nightly (order: -1 !important; muss evtl. ab Zeile 22 angepasst werden auf z.B. order: 1 !important;) 😵💫:
(function() {
if (!window.gBrowser)
return;
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context_closeLeftTabs';
menuitem.setAttribute('label', 'Linke Tabs schließen');
let tabContextMenu = document.getElementById('tabContextMenu');
let refItem = document.getElementById('context_closeTab');
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheStart'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
//click
menuitem.addEventListener('click', () => {
if (event.button == 0) {
for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--)gBrowser.removeTab(gBrowser.tabs[i], {animate: true});
}
});
var css =`
#context_closeTabsToTheStart {
order: -1 !important;
}
#context_closeTabsToTheEnd {
order: -1 !important;
}
#context_closeOtherTabs {
order: -1 !important;
}
#context_closeTabOptions {
display: none !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);
})();
Alles anzeigen
Die css dazu (nur Iconpfad - keine Positionierung):
/*Close--OtherTabs-------------------------------------*/
#context_closeOtherTabs::before {
background-image: url("../icons/16_X_andere_redorange.svg") !important;
}
#context_closeOtherTabs:hover::before {
background-image: url("../icons/16_X_andere_white.svg") !important;
}
/*Close--TabsToTheStart--------------------------------*/
#context_closeTabsToTheStart::before {
background-image: url("../icons/16_X_linke_redorange.svg") !important;
}
#context_closeTabsToTheStart:hover::before {
background-image: url("../icons/16_X_linke_white.svg") !important;
}
#context_closeTabsToTheStart[disabled] {
display: none !important;
}
/*Close--TabsToTheEnd----------------------------------*/
#context_closeTabsToTheEnd::before {
background-image: url("../icons/16_X_rechte_redorange.svg") !important;
}
#context_closeTabsToTheEnd:hover::before {
background-image: url("../icons/16_X_rechte_white.svg") !important;
}
#context_closeTabsToTheEnd[disabled] {
display: none !important;
}
Alles anzeigen
Icons (dunkles Thema):
Weil dein Script vom Aufbau her mein Interesse geweckt hat, so habe ich es in Nightly 156 getestet, aber es verweigert seinen Dienst. Es wird nichts angezeigt, nur #context_closeTabOptions wirkt. Order auch geändert, trotzdem nicht. Deshalb habe ich "Keine Intelligenz" gefragt, und das kam als Antwort:
Hast du eine andere Idee, um die Einfachheit beizubehalten?
Gerade mit der neuesten Nightly auf Linux getestet, läuft!
Sieht hier im Nightly so aus:
Ich hab mal KI bemüht.

(function () {
if (!window.gBrowser)
return;
const tabContextMenu = document.getElementById("tabContextMenu");
if (!tabContextMenu)
return;
// ------------------------------------------------------------
// 1. "Mehrere Tabs schließen" komplett ausblenden
// ------------------------------------------------------------
const closeOptions = document.getElementById("context_closeTabOptions");
if (closeOptions) {
closeOptions.hidden = true;
closeOptions.setAttribute("hidden", "true");
closeOptions.style.display = "none";
}
// ------------------------------------------------------------
// 2. Die drei Einträge aus dem Untermenü holen
// ------------------------------------------------------------
const closeStart = document.getElementById("context_closeTabsToTheStart");
const closeEnd = document.getElementById("context_closeTabsToTheEnd");
const closeOther = document.getElementById("context_closeOtherTabs");
// ------------------------------------------------------------
// 3. Eigenen Eintrag "Linke Tabs schließen" nicht mehr
// zusätzlich erzeugen, da Firefox ihn bereits besitzt.
// ------------------------------------------------------------
// Wir verwenden die vorhandenen Firefox-Menüeinträge.
// Dadurch bleiben deren originale Befehle und Aktualisierungen erhalten.
// ------------------------------------------------------------
// 4. Alle drei wirklich an den Anfang des Menüs verschieben
// ------------------------------------------------------------
// Wichtig:
// insertBefore(..., firstChild) funktioniert hier nicht zuverlässig,
// wenn mehrere Elemente nacheinander verschoben werden.
//
// Deshalb immer wieder den jeweils aktuellen ersten sichtbaren
// Menüpunkt holen.
function moveToTop(element) {
if (!element)
return;
const first = tabContextMenu.firstElementChild;
if (first !== element)
tabContextMenu.insertBefore(element, first);
}
// Reihenfolge am Ende:
// Linke Tabs schließen
// Rechte Tabs schließen
// Andere Tabs schließen
moveToTop(closeOther);
moveToTop(closeEnd);
moveToTop(closeStart);
// ------------------------------------------------------------
// 5. Falls Firefox das Menü beim Öffnen wieder aktualisiert,
// erneut anwenden.
// ------------------------------------------------------------
if (!tabContextMenu._closeTabsCustomHandler) {
tabContextMenu._closeTabsCustomHandler = true;
tabContextMenu.addEventListener("popupshowing", () => {
const closeOptions =
document.getElementById("context_closeTabOptions");
if (closeOptions) {
closeOptions.hidden = true;
closeOptions.setAttribute("hidden", "true");
closeOptions.style.display = "none";
}
const closeStart =
document.getElementById("context_closeTabsToTheStart");
const closeEnd =
document.getElementById("context_closeTabsToTheEnd");
const closeOther =
document.getElementById("context_closeOtherTabs");
moveToTop(closeOther);
moveToTop(closeEnd);
moveToTop(closeStart);
});
}
})();
Alles anzeigen
Sieht hier im Nightly so aus:
Danke, dann kommt das wohl in Linux noch...
Eine andere einfache Lsg. wäre vielleicht über cloneNode die Einträge zu verdoppeln und eine Ebene höher zu verschieben und dann mit css die Originaleinträge auszublenden. Aber ob da die volle Funktionalität erhalten bleibt, ist dann die nächste Frage...Und beim Clonen wird es wohl eine zeitliche Verzögerung geben, aber ob die relevant ist... Wenn die FF-Änderungen dann in der Stable oder Beta angekommen sind, werde ich das für mich auf jeden Fall mal versuchen.
Im 154 geht dies, im Nightly kann ich ja noch nicht testen:
(function() {
if (!window.gBrowser)
return;
const orig = document.getElementById('context_closeOtherTabs');
const clone = orig.cloneNode();
const ref = document.getElementById('context_bookmarkTab');
tabContextMenu.insertBefore(clone, ref.nextSibling);
var css =`
#context_closeTabOptions {
display: none !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);
})();
Alles anzeigen
Sieht dort so aus:
Funktioniert, super.
Aber ist das auch das vom TE gewünschte Ergebnis?
Aber ist das auch das vom TE gewünschte Ergebnis?
Er wird sich ja melden, dann sieht man weiter![]()
Dies ist dann die 'große' Lösung:
// JavaScript Document
// developed without AI-based applications or tools
// T_TabContext_CloseLeftRightOther.uc.js
// FF 154+
// Quelle: https://www...
// Das Script verschiebt die Schließenmenüeinträge aus dem Untermenü '#context_closeTabOptions' ins Tabkontextmenü unter den Eintrag 'Tab schließen' und löscht den entsprechenden Menüeintrag 'Mehrere Tabs schließen'. Nicht auswählbare [disabled] Einträge werden ausgeblendet.
(function() {
if (!window.gBrowser)
return;
const
origStart = document.getElementById('context_closeTabsToTheStart'),
origEnd = document.getElementById('context_closeTabsToTheEnd'),
origOther = document.getElementById('context_closeOtherTabs'),
cloneStart = origStart.cloneNode(),
cloneEnd = origEnd.cloneNode(),
cloneOther = origOther.cloneNode(),
ref = document.getElementById('context_closeTab');// end const
// Reihenfolge der 3 folgenden Zeilen hier beeinflusst die Reihenfolge im Kontextmenü
tabContextMenu.insertBefore(cloneOther, ref.nextSibling);
tabContextMenu.insertBefore(cloneEnd, ref.nextSibling);
tabContextMenu.insertBefore(cloneStart, ref.nextSibling);
var css =`
#context_closeTabOptions {
display: none !important;
}
#context_closeTabsToTheStart[disabled],
#context_closeTabsToTheEnd[disabled],
#context_closeOtherTabs[disabled] {
display: none !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);
})();
Alles anzeigen
Dies ist dann die 'große' Lösung:
Gut gemacht, das gefällt mir.![]()
2002Andreas Hallo, ich bin jetzt auf 156.0a1 (2026-08-27) und unter Linux funktioniert nach wie vor das Script aus Beitrag #26. Vom TE höre ich auch nichts; war das evtl. bloß ein temporäres Problem auf Windows und hat sich in Luft aufgelöst?