fuxxi
Warum hast Du Deinen Beitrag wieder gelöscht?
Mfg.
Endor
Beiträge von Endor
-
-
Hallo Mira_Belle.
Wie Sören schon geschrieben hat, funktioniert diese Version erst
ab Firefox 115. Habe diese Version mittlerweile auch bei Guthib
hoch geladen. Siehe: https://github.com/Endor8/userChr…doTabList.uc.jsIm Script habe ich oben entsprechenden Hinweis hinzu gefügt.
Mfg.
Endor -
Habe ich mittlerweile auch bemerkt.
Vielen Dank für Deine Hilfe!!
Funktioniert wieder einwandfrei.
Mfg.
Endor -
Ist es dann richtig wenn ich es so ändere:
von:if (SessionStore.getClosedTabCount(window) != 0) {
nach:
if (SessionStore.getClosedTabCountForWindow != 0) {
von:
let undoItems = SessionStore.getClosedTabData(window);
nach:let undoItems = SessionStore.getClosedTabDataForWindow;
-
Hallo Sören Hentzschel .
Danke für den Link usw.Muss dass hier dann auch geändert werden?
SessionStore.getClosedTabData(window);
Mfg.
Endor -
Hallo zusammen.
Leider geht ab Firefox 115 aktuell beta,
das Script: newTabButtonUndoTabList.uc.js
wieder nicht mehr.JavaScript: newTabButtonUndoTabList.uc.js
Alles anzeigen// ==UserScript== // @name newTabButtonUndoTabList.uc.js // @description Bei Rechtsklick auf die Neuen Tab Schaltfläche, wird im Kontextmenü, // @description der Eintrag zum Wiederherstellen des zuletzt geschlossenen Tabs angezeigt. // @include main // ==/UserScript== (function () { if (!window.gBrowser){ return; } gBrowser.tabContainer.addEventListener('click', function (e) { if (e.originalTarget.id != 'tabs-newtab-button') return; switch (e.button) { case 1: undoCloseTab(0); break; case 2: UCT.makePopup(e); event.preventDefault(); break; } }, false); })(); var UCT = { init: function () { var mp = document.createXULElement("menupopup"); mp.id = "undo-close-tab-list"; mp.setAttribute("onpopupshowing", "UCT.onpopupshowing(event);"); mp.setAttribute("placespopup", true); mp.setAttribute("tooltip", "bhTooltip"); mp.setAttribute("popupsinherittooltip", true); document?.getElementById("mainPopupSet")?.appendChild(mp); }, makePopup: function (e) { if (SessionStore.getClosedTabCount(window) != 0) { document.getElementById("undo-close-tab-list").openPopupAtScreen(e.screenX +2, e.screenY +2, false); } else { console.log("--- Es gibt keinen Tab, der wiederhergestellt werden kann ---"); } }, onpopupshowing: function (e) { var popup = e.target; while (popup.hasChildNodes()) popup.removeChild(popup.firstChild); let undoItems = SessionStore.getClosedTabData(window); undoItems.map(function (item, id) { var m = document.createXULElement('menuitem'); m.setAttribute('label', item.title); m.setAttribute('image', item.image ); m.setAttribute('class', 'menuitem-iconic bookmark-item'); m.setAttribute('oncommand', 'undoCloseTab(' + id + ')'); popup.appendChild(m); }); popup.appendChild(document.createXULElement("menuseparator")); m = document.createXULElement("menuitem"); m.setAttribute("label", "Chronik in der Sidebar öffnen"); m.setAttribute("image", "chrome://browser/skin/history.svg"); m.setAttribute("class", "menuitem-iconic"); m.setAttribute("oncommand", "SidebarUI.toggle('viewHistorySidebar');"); popup.appendChild(m); }, }; setTimeout(function() { UCT.init(); },250);Konsole sagt:
CodeUncaught TypeError: SessionStore.getClosedTabCount is not a function makePopup file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:40 <anonymous> file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:20 NewTabButtonUndoTabList.uc.js:40:26 makePopup file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:40 <anonym> file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:20Das wären diese Zeilen:
20:UCT.makePopup(e);
40:
if (SessionStore.getClosedTabCount(window) != 0) {
Hat wer eine Idee wie man das wieder zum laufen brigen kann?
Vielen Dank im Voraus für eure Mühe.
Mfg.
Endor -
Anzahl Scripte usw.
So sieht das bei mir aus:

Ja ja selber Schuld...

Mfg.
Endor -
Hallo pirate man !
Und wie weiter oben schon steht, immer den Scriptcache löschen lassen.
Sonst siehst du natürlich keine Änderungen.
Wenn noch nicht, verwende ein SCript zum neustarten von Firefox.
Dabei wird der Scriptcache mit gelöscht.Script:
JavaScript: restartfirefox.uc.js
Alles anzeigen// RestartFirefox.uc.js 2 (function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'restart-button', 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: 'restart-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: false, label: 'Neustart', tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)', onclick: 'if (event.button == 0) { \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ }; \ if (event.button == 1 || event.button == 2) { \ Services.appinfo.invalidateCachesOnRestart(); \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ };' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; var menuitem = document.createXULElement('menuitem'); var props = { id: 'restartfirefox-fileMenu2', label: 'Neustart', tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)', onclick: 'if (event.button == 0) { \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ }; \ if (event.button == 1 || event.button == 2) { \ Services.appinfo.invalidateCachesOnRestart(); \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ };' }; for (var p in props) menuitem.setAttribute(p, props[p]); document.getElementById('menu_FilePopup').insertBefore(menuitem, document.getElementById('menu_FileQuitItem')); var menuitem = document.createXULElement('toolbarbutton'); menuitem.id = 'uc_menu_Restart_H'; menuitem.classList.add('subviewbutton', 'subviewbutton-iconic'); menuitem.setAttribute('label' , 'Neustart'); menuitem.setAttribute('tooltiptext' , 'Neustart'); menuitem.style.listStyleImage= 'url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M15,1a1,1,0,0,0-1,1V4.418A6.995,6.995,0,1,0,8,15a6.954,6.954,0,0,0,4.95-2.05,1,1,0,0,0-1.414-1.414A5.019,5.019,0,1,1,12.549,6H10a1,1,0,0,0,0,2h5a1,1,0,0,0,1-1V2A1,1,0,0,0,15,1Z"/></svg>\')'; menuitem.setAttribute('oncommand' , "Services.appinfo.invalidateCachesOnRestart() || Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);"); var refItem = document.getElementById('appMenu-viewCache').content.getElementById('appMenu-quit-button2'); refItem.parentNode.insertBefore(menuitem, refItem); })();FuchsFan.
Schließe mich den Worten von BrokenHeart voll und ganz an.
Klasse Arbeit!!!
-
-
-
Ja ohne Änderung geht es in 115 und 116.
Obiges Script wurde erst heute vom Autor aktualisiert.
Damit es in Firefox 115 und 116 überhaupt geht.In Firefox 114 läuft hier noch die vorgänger- Version:
Code
Alles anzeigen// ==UserScript== // @name UndoCloseTabButtonN // @description Kürzlich geschlossene Tabs, mit Klick auf Schaltfläche in der Navbar oder Mittelklick auf freie Stelle in Tableiste, wiederherstellen. // @version 1.2.6 // @include main // @charset UTF-8 // @note 2021/12/12 Fx95 SessionStore.getClosedTabData / getClosedWindowData // @note 2021/12/12 Rückgabe Wert von JSON in Array geändert // @note 2019/01/23 Fx66 Problem, bei dem das Klicken in die Tableiste nicht funktionierte - behoben // @note 2019/07/04 Fx69 // @note 2019/09/03 Fx70 // @note 2019/12/09 Fx72 // @note 2021/11/21 FX95 Anpassung von aborix // ==/UserScript== // Schaltfläche wird standardmäßig in die Navigationsleiste eingefügt. (function() { "use strict"; const useTabbarMiddleClick = false; // Kürzlich geschlossene Tabs mit Mittelklick auf Tableiste oder neuen Tab // Schaltfläche wiederherstellen, aktivieren? ( true = ja false = nein ) const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; window.ucjsUndoCloseTabButtonService = { prepareMenu(event) { const doc = (event.view && event.view.document) || document; const menu = event.originalTarget; this.removeChilds(menu); // Geschlossene Tabs let data = SessionStore.getClosedTabData(window); if (typeof(data) === "string") { data = JSON.parse(data); } const tabLength = data.length; for (let i = 0; i < tabLength; i++) { const item = data[i]; const m = this.createFaviconMenuitem(doc, item.title, item.image, i, this.undoTab); const state = item.state; let idx = state.index; if (idx == 0) idx = state.entries.length; if (--idx >= 0 && state.entries[idx]) m.setAttribute("targetURI", state.entries[idx].url); menu.appendChild(m); } // Geschlossenes Fenster data = SessionStore.getClosedWindowData(); if (typeof(data) === "string") { data = JSON.parse(data); } const winLength = data.length; if (winLength > 0) { if (tabLength > 0) menu.appendChild(this.$C(doc, "menuseparator")); menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label: "Geschlossene Fenster" })); for (let i = 0; i < winLength; i++) { const item = data[i]; let title = item.title; const tabsCount = item.tabs.length - 1; if (tabsCount > 0) title += " und ( " + tabsCount + " weitere Tabs )"; const tab = item.tabs[item.selected - 1]; const m = this.createFaviconMenuitem(doc, title, tab.image, i, this.undoWindow); menu.appendChild(m); } } if (tabLength + winLength === 0) { /* menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label : "履歴がありません" }));*/ event.preventDefault(); } }, createFaviconMenuitem(doc, label, icon, value, command) { const attr = { class: "menuitem-iconic bookmark-item menuitem-with-favicon", label: label, value: value }; if (icon) { if (/^https?:/.test(icon)) icon = "moz-anno:favicon:" + icon; attr.image = icon; } const m = this.$C(doc, "menuitem", attr); m.addEventListener("command", command, false); return m; }, undoTab(event) { undoCloseTab(event.originalTarget.getAttribute("value")); }, undoWindow(event) { undoCloseWindow(event.originalTarget.getAttribute("value")); }, removeChilds(element) { const range = document.createRange(); range.selectNodeContents(element); range.deleteContents(); }, onClick(event) { if (event.button === 1) { switch (event.originalTarget.localName) { case "box": // -Fx65 case "scrollbox": // Fx66- case "toolbarbutton": event.preventDefault(); event.stopPropagation(); undoCloseTab(); break; } } }, $C(doc, tag, attrs) { const e = tag instanceof Node? tag: doc.createElementNS(XULNS, tag); if (attrs) { Object.entries(attrs).forEach(([key, value]) => e.setAttribute(key, value)); } return e; }, }; function run() { if (useTabbarMiddleClick) { gBrowser.tabContainer.addEventListener("click", ucjsUndoCloseTabButtonService.onClick, true); } const buttonId = "undo1-close-tab-button"; if (document.getElementById(buttonId)) { return; } try { Cu.import("resource:///modules/CustomizableUI.jsm"); CustomizableUI.createWidget({ id : buttonId, defaultArea : CustomizableUI.AREA_NAVBAR, type : "custom", onBuild : doc => { const btn = ucjsUndoCloseTabButtonService.$C(doc, "toolbarbutton", { id : buttonId, class : "toolbarbutton-1 chromeclass-toolbar-additional", type : "menu", anchor : "dropmarker", label: "Geschlossene Tabs", tooltiptext: "Geschlossene Tabs wieder herstellen", image : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC", onclick : "ucjsUndoCloseTabButtonService.onClick(event);", oncontextmenu : "event.preventDefault();", }); const menu = ucjsUndoCloseTabButtonService.$C(doc, "menupopup", { tooltip : "bhTooltip", popupsinherittooltip: "true", oncontextmenu : "event.preventDefault();", onpopupshowing : "ucjsUndoCloseTabButtonService.prepareMenu(event);", }); btn.appendChild(menu); return btn; }, }); } catch (e) {} } if (gBrowserInit.delayedStartupFinished) { run(); } else { const OBS_TOPIC = "browser-delayed-startup-finished"; const delayedStartupFinished = (subject, topic) => { if (topic === OBS_TOPIC && subject === window) { Services.obs.removeObserver(delayedStartupFinished, topic); run(); } }; Services.obs.addObserver(delayedStartupFinished, OBS_TOPIC); } })(); -
Man soll ja zbs.:
Zeile 168
Cu.import("resource:///modules/CustomizableUI.jsm");so ändern:
Cu.import("resource:///modules/CustomizableUI.sys.mjs");
warum geht dann dieses Script in Firefox 115 - 116 aber nicht mehr?
JavaScript
Alles anzeigen// ==UserScript== // @name UndoCloseTabButtonN // @description Kürzlich geschlossene Tabs, mit Klick auf Schaltfläche in der Navbar oder Mittelklick auf freie Stelle in Tableiste, wiederherstellen. // @version 1.2.6a // @include main // @charset UTF-8 // @note 2023/06/08 Fx115 SessionStore.getClosedTabData → SessionStore.getClosedTabDataForWindow // @note 2022/11/12 Das Verhalten der linken, mittleren und rechten Taste verändern // @note 2021/12/12 Fx95 SessionStore.getClosedTabData / getClosedWindowData // @note 2019/01/23 Fx66 Problem, bei dem das Klicken in die Tableiste nicht funktionierte - behoben // @note 2019/07/04 Fx69 // @note 2019/09/03 Fx70 // @note 2019/12/09 Fx72 // ==/UserScript== // Schaltfläche wird standardmäßig in die Tableiste eingefügt. (function () { "use strict"; const useTabbarMiddleClick = false; // Kürzlich geschlossene Tabs mit Mittelklick auf Tableiste oder neuen Tab // Schaltfläche wiederherstellen, aktivieren? ( true = ja false = nein ) const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; window.ucjsUndoCloseTabButtonService = { prepareMenu(event) { const doc = (event.view && event.view.document) || document; const menu = event.originalTarget; this.removeChilds(menu); // Geschlossene Tabs let data = (SessionStore.getClosedTabData || SessionStore.getClosedTabDataForWindow)(window); if (typeof (data) === "string") { data = JSON.parse(data); } const tabLength = data.length; for (let i = 0; i < tabLength; i++) { const item = data[i]; const m = this.createFaviconMenuitem(doc, item.title, item.image, i, this.undoTab); const state = item.state; let idx = state.index; if (idx == 0) idx = state.entries.length; if (--idx >= 0 && state.entries[idx]) m.setAttribute("targetURI", state.entries[idx].url); menu.appendChild(m); } // Geschlossenes Fenster data = SessionStore.getClosedWindowData(); if (typeof (data) === "string") { data = JSON.parse(data); } const winLength = data.length; if (winLength > 0) { if (tabLength > 0) menu.appendChild(this.$C(doc, "menuseparator")); menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label: Services.locale.appLocaleAsBCP47.includes("de") ? "Geschlossene Fenster" : "閉じたウインドウ" })); for (let i = 0; i < winLength; i++) { const item = data[i]; let title = item.title; const tabsCount = item.tabs.length - 1; if (tabsCount > 0) title += " (他:" + tabsCount + ")"; const tab = item.tabs[item.selected - 1]; const m = this.createFaviconMenuitem(doc, title, tab.image, i, this.undoWindow); menu.appendChild(m); } } if (tabLength + winLength === 0) { /* menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label : "履歴がありません" }));*/ event.preventDefault(); } }, createFaviconMenuitem(doc, label, icon, value, command) { const attr = { class: "menuitem-iconic bookmark-item menuitem-with-favicon", label: label, value: value }; if (icon) { if (/^https?:/.test(icon)) icon = "moz-anno:favicon:" + icon; attr.image = icon; } const m = this.$C(doc, "menuitem", attr); m.addEventListener("command", command, false); return m; }, undoTab(event) { undoCloseTab(event.originalTarget.getAttribute("value")); }, undoWindow(event) { undoCloseWindow(event.originalTarget.getAttribute("value")); }, removeChilds(element) { const range = document.createRange(); range.selectNodeContents(element); range.deleteContents(); }, onClick(event) { if (event.button === 0 && event.target.id === "undo1-close-tab-button") { console.log(event.target.id) event.preventDefault(); event.stopPropagation(); undoCloseTab(); } else if (event.button == 1) { switch (event.originalTarget.localName) { case "box": // -Fx65 case "scrollbox": // Fx66- event.preventDefault(); event.stopPropagation(); undoCloseTab(); break; } } else if (event.button === 2 && event.target.id === "undo1-close-tab-button") { event.preventDefault(); event.stopPropagation(); let pos = "after_end", x, y; if ((event.target.ownerGlobal.innerWidth / 2) > event.pageX) { pos = "after_position"; x = 0; y = 0 + event.target.clientHeight; } event.target.querySelector("menupopup").openPopup(event.target, pos, x, y); } }, $C(doc, tag, attrs) { const e = tag instanceof Node ? tag : doc.createElementNS(XULNS, tag); if (attrs) { Object.entries(attrs).forEach(([key, value]) => e.setAttribute(key, value)); } return e; }, }; function run() { if (useTabbarMiddleClick) { gBrowser.tabContainer.addEventListener("click", ucjsUndoCloseTabButtonService.onClick, true); } const buttonId = "undo1-close-tab-button"; if (document.getElementById(buttonId)) { return; } try { Cu.import("resource:///modules/CustomizableUI.jsm"); CustomizableUI.createWidget({ id: buttonId, defaultArea: CustomizableUI.AREA_NAVBAR, type: "custom", onBuild: doc => { const btn = ucjsUndoCloseTabButtonService.$C(doc, "toolbarbutton", { id: buttonId, class: "toolbarbutton-1 chromeclass-toolbar-additional", type: "contextmenu", anchor: "dropmarker", label: Services.locale.appLocaleAsBCP47.includes("de") ? "Kürzlich geschlossene Tabs" : "閉じたタブ", tooltiptext: Services.locale.appLocaleAsBCP47.includes("de") ? "Kürzlich geschlossene Tabs wieder herstellen" : "閉じたタブ\n中クリックで最後に閉じたタブを復元", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC", onclick: "ucjsUndoCloseTabButtonService.onClick(event);", }); const menu = ucjsUndoCloseTabButtonService.$C(doc, "menupopup", { tooltip: "bhTooltip", popupsinherittooltip: "true", oncontextmenu: "event.preventDefault();", onpopupshowing: "ucjsUndoCloseTabButtonService.prepareMenu(event);", }); btn.appendChild(menu); return btn; }, }); } catch (e) { } } if (gBrowserInit.delayedStartupFinished) { run(); } else { const OBS_TOPIC = "browser-delayed-startup-finished"; const delayedStartupFinished = (subject, topic) => { if (topic === OBS_TOPIC && subject === window) { Services.obs.removeObserver(delayedStartupFinished, topic); run(); } }; Services.obs.addObserver(delayedStartupFinished, OBS_TOPIC); } })();Mfg.
Endor -
/*Space_and_Separator_Restorer.uc.js*/
Nur als Hinweis, davon gibt es eine neuere Version:
CustomJSforFx/space_and_separator_restorer.uc.js at master · Aris-t2/CustomJSforFxcustom scripts. Contribute to Aris-t2/CustomJSforFx development by creating an account on GitHub.github.comob da die Änderungen schon gemacht sind weiß ich jetzt aber nicht.
Mfg.
Endor -
Gern geschehen.

Mfg.
Endor -
Hallo 2002Andreas.
Stimmt genau.
Hatte Zitronellas Betrag erst nachher gesehen.
Da war mein Beitrag mit Script schon fertig.Nun hat er wenigstens eine Auswahl.

Schönes Wochenende wünsche ich Dir.
Hier viel Sonne und warm 30°+
Mfg.
Endor -
Ansonsten hier noch ein Script dazu:
Notwendige Vorarbeiten zu Verwendung von Scripten:
userChrome.js/readme.md at master · Endor8/userChrome.jsSkripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.github.comJavaScript
Alles anzeigen// save-page.uc.js (function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'save-page-toolbar-button', 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: 'save-page-toolbar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Seite speichern', tooltiptext: 'Seite speichern unter', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmxJREFUeNqUU0tIVFEY/s7jztzRGedBaVMQJAMt3LjrAVaGzmjQKmphiyAialsrA7HotW8RGO0kRsighdVEhlBWRoSLkigse0jBCDWTijpz7z3958xtGA2KDlzuz//8/u98hyUv3P+xWHJjZQ/wFMCgDxm+tdZmjMHiQH1AFCzB41IXF891439PtP9erCHIwMt6rD7jncDTfcCzLvTfnQUmMuZbZd/5DDxpN+m6TldK+PV93wfAhYAkeDYv42LhmgFeJx1cJlufkHRxvnAdfTVIpPI7HO5oBqeKgABuj71FT2YryMTww2kcTKdM1s3RaRzIpCqFrMKM/N3JpsmmAddTGU4Nv8KNFx9M7ERuqsrlydxrQDA0BC0iXX2rNrg1OgVBHSzaIWpbyL78iInT+1FyPLRtlKsIfPzVoVuQyFzNbahGjnS10BUBQcI9Mv6+YsPDzsEZ5I834sHYI5PX2b4LewbzmDy6BR4RWW0QJOiVIsDy95tbdtEUFnBJJNt2tJk8bWufjumkaoMsraBFEqAV4iHL+ApLLhrrJHKfVrDbB5ubdYyvuOSB117jsXSL+WvnyPMKeT/LCglbYOCdgytvHOgbs4nABDFe1NLVCJivUl5DklAUVAoLJY/Y5uhpljjUup4iHoYm55Cd8bBYUmZNTnr+Q6bd21N0UwwrLkOE1unYbKP3zFl8yS9g76YAIrbEsufroF6yedJ1pOx65jFpLeim9FjAuEAybCMRDSC5LoymmE3oyuQjPpigXGaatGrUa1Eke4cuqVA07dAqjuJQlKxoAqP1tNwtmkR6m2d/eXDN9MX/8SjdXwIMAOhU0E/NNxUYAAAAAElFTkSuQmCC)', oncommand: 'saveBrowser(gBrowser.selectedBrowser)' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; }) ();Mfg.
Endor -
Traurig.
R.I.P.
Mfg.
Endor -
Das klingt ja gar nicht gut.
Dann alles Gute an sie, und gute Besserung.
Dem schließe ich mich von herzen an.
Alles Gute.Mfg.
Endor -
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Mfg.
Endor -
Firefox 113.0.2 ist verfügbar.
Firefox 113.0.2, See All New Features, Updates and Fixeswww.mozilla.orgMfg.
Endor