Es gibt mittlerweile Version 8.9
Download Notepad++ v8.9: security enhancements | Notepad++
Mfg.
Endor
Es gibt mittlerweile Version 8.9
Download Notepad++ v8.9: security enhancements | Notepad++
Mfg.
Endor
Hallo 2002Andreas.
Das Script tut noch mehr, dies ist nur eine Funktion davon.
Im Tabkontextmenü werden die Untermenüs zum öffnen der zuletzt geschlossenen Tabs und Fenster eingefügt.
Und eben auch der obige Eintrag.
Einen schönen Sonntag und eine tolle Woche wünsche ich Dir.
Mfg.
Endor
Der Eintrag Alle Tabs auflisten kommt von diesem Script:
// ==UserScript==
// @name UndoListInTabmenuToo
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description UndoListInTabmenuToo.uc.js
// @include main
// @compatibility Firefox 140
// @author Alice0775
// @version 2025/09/05 mark '*' for current index in the tooltip
// @version 2025/08/06 fix tooltip bug due to the change of 25/01/05
// @version 2025/07/26 add List All Tabs menu
// @version 2025/01/05 remove redundant menuitems
// @version 2025/01/05 fix bug
// @version 2024/12/22 fix Bug 1936336 - Disallow inline event handlers
// @version 2024/08/23 Bug 1690613 - Allow access to url/title/favIconUrl without "tabs" permission in session API
// @version 2023/06/16 08:00 Bug 1819675 - Expand recently closed tabs to include all Windows
// @version 2022/05/10 fix ref to context-media-eme-separator
// @version 2021/12/09 remove JSON.parse (Bug 1733425)
// @version 2021/04/25 fix 1689378
// @version 2019/11/14 remove eval
// @version 2019/06/30 10:00 Bug 1555060 Convert <tabs> to a custom element
// @version 2019/06/24 23:00 wait for gBrowser initialized
// @version 2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
// @version 2018/05/10 60
// @version 2017/11/18 nsIPrefBranch to nsIPrefBranch
// @version 2010/09/18 00:00 4.0b7pre
// @version 2009/02/03 13:00 Tab-Verlauf im Tooltip anzeigen
// @Note Fügt die UndoClose-Tab-Liste zu Tabs und Kontextmenüs hinzu
// @OriginalCode Orginalcode aus browser.js für populateUndoSubmenu verwenden
// @version 2018/05/09 15:00 61
// ==/UserScript==
// @version 2010/03/26 13:00 Minefield/3.7a4pre Bug 554991 - allow tab context menu to be modified by normal XUL overlays
// @version 2010/03/15 00:00 Minefield/3.7a4pre Bug 347930 - Tab strip should be a toolbar instead
// @version 2009/09/09 15:00 Mittelklick-Handhabung
// @version 2009/09/03 22:00 Firefox3.7a1pre Funktion wurde wieder hergestellt. (Bug 489925. getElementById should not return anonymous nodes)
// @version 2009/08/22 00:00 Firefox3.6 Ändern des stringbandle
// @version 2009/04/24 00:00 #394759 [Firefox:Session Restore]-Add undo close window feature
// @version 2008/10/12 18:00 Fx3.0.4pre Mittelklick-Popupmenü wurde nicht geschlossen und andere Korrekturen
// @version 2007/10/05 10:00
var UndoListInTabmenu = {
// -- config --
TABCONTEXTMENU : true , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
CONTEXTMENU : true, //Im Hauptkontextmenü: anzeigen: true , nicht anzeigen: false
// -- config end--
ss: null,
get tabContext() {
return document.getElementById("tabContextMenu");
},
get navigatorBundle() {
return Services.strings.createBundle(
"chrome://browser/locale/browser.properties"
);
},
init: function(){
if (this.TABCONTEXTMENU){
//Tabkontextmenü
var tabContext = this.tabContext;
this.makePopup(tabContext, null, "tabContextUndoList");
}
if (this.CONTEXTMENU){
//Hauptkontextmenü
var contextMenu = document.getElementById("contentAreaContextMenu");
var refItem = document.getElementById("context-media-eme-separator");
this.makePopup(contextMenu, refItem, "ContextUndoList");
}
// get closed-tabs from nsSessionStore
this._ss = SessionStore;
},
makePopup: function(popup, refItem, id){
var menu;
//label
const locale = "de";
// "Recently Closed Windows"
menu = document.createXULElement("menu");
menu.setAttribute("id", "historyUndoWindowMenu3");
menu.setAttribute("label", "K\u00FCrzlich geschlossene Fenster");
menu.setAttribute("accesskey", "F");
menu.setAttribute("disabled", "false");
popup.insertBefore(menu, refItem);
menupopup = document.createXULElement("menupopup");
menu.appendChild(menupopup);
menupopup.setAttribute("id", "historyUndoWindowPopup3");
//menu.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoWindowSubmenu(this);");
menupopup.addEventListener("popupshowing", (event) => UndoListInTabmenu.populateUndoWindowSubmenu(event.currentTarget));
//Liste kürzlich geschossener Tabs
const LABELTEXT = "K\u00FCrzlich geschlossene Tabs"; //create menu
menu = document.createXULElement("menu");
menu.setAttribute("label", LABELTEXT);
menu.setAttribute("accesskey", "T");
if (id)
menu.setAttribute("id", id);
//menu.setAttribute("disabled", true);
var menupopup = document.createXULElement("menupopup");
menupopup.addEventListener("popupshowing", () => UndoListInTabmenu.populateUndoSubmenu(menupopup));
//menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
menu.appendChild(menupopup);
popup.insertBefore(menu, refItem);
//All tabs menu
menu = document.createXULElement("menuitem");
menu.setAttribute("label", "Alle Tabs auflisten");
menu.setAttribute("accesskey", "A");
popup.insertBefore(menu, refItem);
menu.addEventListener("command", (event) => {document.getElementById("alltabs-button").click()})
//add event listener
popup.addEventListener('popupshowing',function(event) {
UndoListInTabmenu.toggleRecentlyClosedWindows(document.getElementById("historyUndoWindowMenu3"));
// no restorable tabs, so make sure menu is disabled, and return
if (UndoListInTabmenu._ss.getClosedTabCount(window) == 0) {
menu.setAttribute("disabled", true);
//menu.setAttribute("hidden", true);
return;
}
menu.removeAttribute("disabled");
//menu.setAttribute("hidden", false);
},false);
},
/**
* Populate when the history menu is opened (Fx3.6)
*/
populateUndoSubmenu: function(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
var utils = RecentlyClosedTabsAndWindowsMenuUtils;
var tabsFragment = utils.getTabsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-tabs"
);
undoPopup.appendChild(tabsFragment);
// populate tab historis for tooltip
var undoItems = UndoListInTabmenu._ss.getClosedTabDataForWindow(window);
for (var i = 0; i < undoItems.length; i++) {
var entries = undoItems[i].state.entries;
var tooltiptext = "";
for (var j = entries.length - 1; j > -1; j--){
if (j != entries.length - 1)
tooltiptext += "\n";
if (undoItems[i].state.index - 1 !== j) {
tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
} else {
tooltiptext += "*" + ". " + entries[j].title;
}
}
undoPopup.childNodes[i].setAttribute("tooltiptext", tooltiptext);
}
// "Append Clear undo close tb list"
undoPopup.appendChild(document.createXULElement("menuseparator"));
let m = undoPopup.appendChild(document.createXULElement("menuitem"));
m.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
m.setAttribute("accesskey", "l");
m.addEventListener("command", function() {
let prefs = Services.prefs;
let max_undo = prefs.getIntPref("browser.sessionstore.max_tabs_undo");
prefs.setIntPref("browser.sessionstore.max_tabs_undo", 0);
prefs.setIntPref("browser.sessionstore.max_tabs_undo", max_undo);
}, false);
},
toggleRecentlyClosedWindows: function PHM_toggleRecentlyClosedWindows(menu) {
// enable/disable the Recently Closed Windows sub menu
// no restorable windows, so disable menu
if (this._ss.getClosedWindowCount() == 0)
menu.setAttribute("disabled", true);
else
menu.removeAttribute("disabled");
},
/**
* Populate when the history menu is opened
*/
populateUndoWindowSubmenu: function PHM_populateUndoWindowSubmenu(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
let utils = RecentlyClosedTabsAndWindowsMenuUtils;
let windowsFragment = utils.getWindowsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-windows"
);
undoPopup.appendChild(windowsFragment);
undoPopup.firstChild.setAttribute("accesskey", "R");
// "Append Clear undo close window list"
undoPopup.appendChild(document.createXULElement("menuseparator"));
m = undoPopup.appendChild(document.createXULElement("menuitem"));
m.setAttribute("label", "Liste der kürzlich geschlossenen Fenster l\u00F6schen");
m.setAttribute("accesskey", "L");
m.addEventListener("command", function() {
for (let i = SessionStore.getClosedWindowCount() -1; i >= 0; i--)
SessionStore.forgetClosedWindow(i);
}, false);
}
};
// We should only start the redirection if the browser window has finished
// starting up. Otherwise, we should wait until the startup is done.
if (gBrowserInit.delayedStartupFinished) {
UndoListInTabmenu.init();
} else {
let delayedStartupFinished = (subject, topic) => {
if (topic == "browser-delayed-startup-finished" &&
subject == window) {
Services.obs.removeObserver(delayedStartupFinished, topic);
UndoListInTabmenu.init();
}
};
Services.obs.addObserver(delayedStartupFinished,
"browser-delayed-startup-finished");
}
Alles anzeigen
Dies nur als Info.
Mfg.
Endor
auf "https://u6.getuploader.com/script/" landet.
Darauf wollte ich dich schon vor Tagen aufmerksam machen.
Für mich der Beweis, der ausgezeichneten Qualität deiner Scripte. ![]()
![]()
![]()
Vielen Dank für Deine tolle Arbeit.
Mfg.
Endor
Hallo Mitleser .
Vielen Dank.
Funktioniert wieder einwandfrei.![]()
![]()
![]()
Vielen Dank!
Mfg.
Endor
Hallo zusammen.
Seit Firefox 145 funktioniert dieses Script:
/* LoadingBar.uc.js */
// Location Bar Enhancer5.1; Loading Bar 0.3.0
(function(){
var cssStr = `
#urlbar-background {
background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), linear-gradient(to right, rgba(255,255,255) 0%, rgba(17,238,238,.7) 100%);
background-size:0 0;
background-repeat:repeat-x, no-repeat;
transition: background-size 350ms ease 0s !important;
border-radius: 18px !important;
}
#urlbar {
border-radius: 18px !important;
border: solid 1px #3399ff;
}
#searchbar {
border-color: #3399ff !important;
}
#urlbar-background:not([style="background-size: 0% 100%;"]) {
animation: progress-bar-stripes 2s linear infinite;
}
@keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 51px 0;
}
}
`.replace(/\s{2,}|\r|\n/,"");
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
var mainW = document.getElementById("main-window");
document.insertBefore(style, mainW);
function main(window) {
var {document, gBrowser} = window;
function $(id) { return document.getElementById(id) };
var urlbar = $("urlbar-background");
let pageProgress = 0;
let async = makeWindowHelpers(window).async;
var LoadingBar = {
listener: {
onChangeTab: function(e) {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
},
onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
if (gBrowser.contentDocument === aBrowser.contentDocument) {
var val = (curTotalProgress-1)/(maxTotalProgress-1);
pageProgress = val;
urlbar.style.backgroundSize = (100*val) + '% 100%';
if (val > 0.9)
async(function() {
if (pageProgress > 0.95)
urlbar.style.backgroundSize = '100% 100%';
}, 1000);
}
},
onStateChange: function() {
if (pageProgress > 0.95){
async(function() {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
}, 1000);
}else{
urlbar.style.backgroundSize = '0% 100%';
}
}
}
};
gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.addTabsProgressListener(LoadingBar.listener);
unload(function() {
gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.removeTabsProgressListener(LoadingBar.listener);
}, window);
}
watchWindows(main, "navigator:browser");
function runOnLoad(window, callback, winType) {
window.addEventListener("load", function() {
window.removeEventListener("load", arguments.callee, false);
if (window.document.documentElement.getAttribute("windowtype") == winType)
callback(window);
}, false);
}
function runOnWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
let browserWindows = Services.wm.getEnumerator(winType);
while (browserWindows.hasMoreElements()) {
let browserWindow = browserWindows.getNext();
if (browserWindow.document.readyState == "complete")
watcher(browserWindow);
else
runOnLoad(browserWindow, watcher, winType);
}
}
function watchWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
runOnWindows(callback, winType);
function windowWatcher(subject, topic) {
if (topic == "domwindowopened")
runOnLoad(subject, watcher, winType);
}
Services.ww.registerNotification(windowWatcher);
unload(function() { Services.ww.unregisterNotification(windowWatcher) });
}
function unload(callback, container) {
let unloaders = unload.unloaders;
if (unloaders == null)
unloaders = unload.unloaders = [];
if (callback == null) {
unloaders.slice().forEach(function(unloader) { unloader() });
unloaders.length = 0;
return null;
}
if (container != null) {
container.addEventListener("unload", removeUnloader, false);
let origCallback = callback;
callback = function() {
container.removeEventListener("unload", removeUnloader, false);
origCallback();
}
}
function unloader() {
try {
callback();
}
catch(ex) {}
}
unloaders.push(unloader);
function removeUnloader() {
let index = unloaders.indexOf(unloader);
if (index != -1)
unloaders.splice(index, 1);
}
return removeUnloader;
}
function makeWindowHelpers(window) {
let {clearTimeout, setTimeout} = window;
function async(callback, delay) {
delay = delay || 0;
let timer = setTimeout(function() {
stopTimer();
callback();
}, delay);
function stopTimer() {
if (timer == null)
return;
clearTimeout(timer);
timer = null;
}
}
return {
async: async,
};
}
})();
Alles anzeigen
leider nicht mehr.
Es fügt der Adressleiste eine Ladeanimation hinzu.
Habt ihr eine Idee wie man das anpassen muss?
Konsole sagt:
Uncaught TypeError: can't access property "style", urlbar is null
onChangeTab file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:46
updateCurrentBrowser chrome://browser/content/tabbrowser/tabbrowser.js:1550
_setupEventListeners chrome://browser/content/tabbrowser/tabbrowser.js:7837
set selectedIndex chrome://global/content/elements/tabbox.js:238
set selectedPanel chrome://global/content/elements/tabbox.js:248
set selectedIndex chrome://global/content/elements/tabbox.js:736
set selectedItem chrome://global/content/elements/tabbox.js:760
set selectedTab chrome://global/content/elements/tabbox.js:83
set selectedTab chrome://browser/content/tabbrowser/tabbrowser.js:471
LoadingBar.uc.js:46:13
Alles anzeigen
Uncaught TypeError: can't access property "style", urlbar is null
onStateChange file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:64
timer file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:179
LoadingBar.uc.js:64:21
Vielen Dank im Voraus für Eure Hilfe.
Mfg.
Endor
Hallo Mira_Belle .
Auch von mir alles Gute zum Geburtstag!
Viel Gesundheit, Glück und Wohlergehen wünsche ich dir
von ganzem Herzen. Bleib gesund.
Viele Grüße
Endor
funktionierendes Script für die Buttons Minimieren, Maximieren und Schließen?
Stell deines doch mal in einem neuen Thread rein, vielleicht kann man es ja reparieren.
Hallo zusammen. Ich habe oben den link zum Script wieder entfernt. Ich bin der selben Meinung wie BrokenHeart . Das Script würde ich schon aus Sicherheitsgründen nicht verwenden. Daher habe ich den Link entfernt.
Mfg.
Endor
Hallo zusammen.
Der Autor hat bis jetzt keine neue Version angeboten.
Leider.
Habe diese Version der Mehrzeiligen Tableiste gefunden,
sollte bis Firefox 146 kompatibel sein.
Da nicht verwendet oder getestet kann ich auch nichts weiter dazu sagen.
Da das Script zu groß ist hier die Quelle:
Quelle habe ich wieder entfernt .
Könnt ihr ja mal testen ob die überhaupt funktioniert und wenn ja ob das Problem
damit behoben ist. Aber Vorsicht, das Script hat über 7000 Zeilen.
Das wäre mir zu viel. Also Verwendung nur auf eigene Gefahr.
Mfg.
Endor
Hallo Speravir.
readme aktualisiert:
Danke für den Link zum Thema Line Breaks. War sehr hilfreich.![]()
Mfg.
Endor
Hallo Mira_Belle .
Alles gut. Du wolltest mir doch nur helfen.
Alles bestens.
Mfg.
Endor
Hallo Mira_Belle.
Es geht im readme im Moment nur um das Icon für die Symbolleistenschaltfläche.
Trotzdem Danke für Deinen Vorschlag.
Eine Frage hätte ich da, soll ich den readme nur in Deutscher Sprache machen oder auch
in Englisch?
Aktuell siehe hier:
Mfg.
Endor
Speravir
ist aktualisiert:
Hast Du einen Vorschlag für den Readme?
Mfg.
Endor
Hallo Mira_Belle !
Damit das Script extra_config_menu.uc.js richtig funktioniert
muss bei about:config der Schalter:
security.allow_unsafe_dangerous_privileged_evil_eval
auf true sein. Sonst funktioniert es nicht.
Mfg.
Endor
Hallo Mitleser .
Wenn ich mich nicht irre, hatten wir mit Linux das schon mal.
Linux unterscheidet zwischen groß und Kleinschreibung.
Windows nicht. Achte mal darauf ob das, im Script und
bei den Ordnern übereinstimmt.
Nur ein Versuch.
Mfg.
Endor
bei all der Kritik
Die meines Erachtens nicht angebracht war oder ist.
Du hast eine prima Verbesserung gemacht.
Vielen Dank dafür.
![]()
Für mich auch true als Standard.
Mfg.
Endor
Das Script aus Beitrag 138 funktioniert.
Die Version bei Github ist Speravirs Version aus 128.
Die letzte Version von Speravir vom 30.09.2025. Beitrag 138 ist ja dein eigener
Beitrag. Ob die in Linux funktioniert kann ich leider auch nicht sagen, da hier
nur Windows vorhanden ist.
Die vier neuen Einträge:
"prefs.js", "user.js", "userChromeShadow.css" & "userChrome.js"
dafür hat Mira_Belle vorausschauender Weise, bereits im Script ab Zeile 107
entsprechende Optionen, true anzeigen false nicht anzeigen eingefügt.
Nun müsste man nur noch entscheiden was Standard sein soll true oder false?
Was meinst Du dazu?
Mfg.
Endor