Ich habe gerade mal auf archive.mozilla.org nachgesehen. Da sind wirklich die letzten Builds vom 2.05.2025, sowohl die englischen als auch die lokalisierten. Und bis jetzt wurde mir auch kein neues Update angeboten.
Beiträge von milupo
-
-
Bei mir auch. Ich habe den Computer aber gerade erst eingeschalten. Nach ein paar Minuten meldet sich dann in der Regel ein neues Update an. Mal sehen. Immerhin waren es nicht drei Brückentage …
-
-
-
Das Profil ist doch nicht in Local, sondern in APPDATA\Roaming, oder?
Die eigentlichen Profildateien sind in Roaming, in Local sind nur die Cache-Dateien.
-
Deine Version(en) funktionieren bei mir nur das für bzw. in dem bei Programmstart geöffneten Fenster, also das erste "Original" Fenster.
Ich bin froh, dass ich Skripte halbwegs anpassen kann. Und mein Eindruck ist, dass doch sehr wenige die Skripte über mehrere Fenster hinweg verwenden. Zur Zeit sind es zwei, drei Nutzer.
-
Und für das zweite Skript probiere mal diese Version:
JavaScript
Alles anzeigen(function () { if (location != AppConstants.BROWSER_CHROME_URL) return; let translate = function () { let browserMM = gBrowser.selectedBrowser.messageManager; browserMM.addMessageListener('getSelection', function listener(message) { let t = (message.data !== ''); let e = (document.charset || document.characterSet); if (t) { openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab'); } else { openWebLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab'); }; browserMM.removeMessageListener('getSelection', listener, true); }); browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true); } let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-deepltranslator'; menuitem.setAttribute('label', 'Übersetzen mit DeepL'); menuitem.setAttribute('tooltiptext', 'Mit DeeplTranslate übersetzen'); // menuitem.setAttribute('oncommand', '(' + translate.toString() + ')()'); // menuitem.classList.add('menuitem-iconic'); // Wer kein Icon möchte kann die nächsten beiden Zeilen auskommentieren/löschen // menuitem.style.listStyleImage = 'url("https://www.deepl.com/favicon.ico")'; // menuitem.style.listStyleImage = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACNwAAAjcB9wZEwgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGZSURBVDiNjZKxaxRBFMZ/b2ZHbWITUxkRC4PnBUW0k1gkoFlMYmIR8R+w0UZBFAvtLAMS0ipC0guCd0GOa23EJGTPkBRCSCNHKiEgMzvPwmjCuiv3lft97zff7BuhQraWTouJLwE0mmf518a7spwUPxwZvlmLms8B4wWrLZhHPvuwUg44N9afGPcc4T5gK4pFgSUv/jHrre8HgKHJE4nzHWBgn/sZdBuYqQB1Q+5rbLR2DUBy1J89GIbEmNmQNW8DqxWAgcS5IQBT5vqYP3H1Gw9AHyosAKECVA4QuKfIPMhHVKygV4OVU8ByT4BDsiI6rWpusdbYUdgpBpLSMeGTRLYx2o5q9kT0ja2P3xU401ODQJz1neYdVRkT9C1gyob/Ngg/3VbifJf9TVg1L2Q43UC1eo3eb8KfB7O7uRf7T782Yo8hXBG4DFwvaRgFFoP4GTqt7u/bFuTOp5dU9BUw8u/BOhqy5fZ//4HvNL6ErHlNkSmFb4e9YM1WMV+5xjxrvM+P99VBngI/qnK96UI66OrpEhcnThatXx/tiqJJdDA6AAAAAElFTkSuQmCC")'; let refItem = document.getElementById('context-inspect'); refItem.parentNode.insertBefore(menuitem, refItem); document.getElementById('context-deepltranslator').addEventListener('click', event => { translate (); }); })();
-
Erst einmal zum Profilordner-Skript. Probiere mal diese Version:
JavaScript
Alles anzeigen(function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'Profilordner', 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: 'Profilordner', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, // Name im AnpassungFenster label: 'zum Aktuellen Profilordner', // Name bei MausHover wenn in Symbolleiste tooltiptext: 'zum Aktuellen Profilordner', // style: 'list-style-image: url(file:///C:/Users/SonGoku/AppData/Roaming/Mozilla/Firefox/Profiles/zlmsqesg.default-release/chrome/icon/dateiname.png)', style: 'list-style-image: url(file:///C:/Users/DBI/AppData/Roaming/Mozilla/Firefox/Profiles/zvjpsewu.DBI/chrome/icon/userProfil.ico)', // oncommand: "Services.dirsvc.get('ProfD', Ci.nsIFile).launch();" }; for (var p in props) toolbaritem.setAttribute(p, props[p]); toolbaritem.addEventListener('click', event => { if (event.button == 0) { Services.dirsvc.get("ProfD", Ci.nsIFile).launch(); } }); return toolbaritem; } }); } catch(e) { }; })();
-
clio Gern geschehen.
-
FuchsFan Meines Erachtens kannst du dir ein zusätzliches background-image sparen, denn mit content: kannst du das genauso ausdrücken. Eine Eigenschaft weniger und keine leere content-Eigenschaft.
-
Gut, dann hat er ja die Wahl.
-
Wenn sie noch funktioniert, sie ist immerhin 4 Jahre alt.
-
Normalerweise brauchst du gar nichts weiter machen, außer das Icon in den Unterordner icons im chrome Ordner ablegen.
geldhuegel Es sei denn, du willst dem Symbol einen anderen Namen als A.png geben. Dann musst du in Zeile 14 diesen Namen angeben.
-
Probiere mal diese Version:
JavaScript
Alles anzeigen// Downloadbutton.uc.js (function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'Download-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: 'Download-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, label: 'Download Fenster öffnen', accesskey: 'D', tooltiptext: 'Download Fenster öffnen', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAC7klEQVR42mJgAIL3K2X+AwQQy9VMzf+cIooMAAHE8H6i2n+QKEAAsbCrSjJ8vST4HyCAQByG13Mc/n+/D5EBCCAWsMByBQa2bz/BkgABxAAz5f1aYbAKgAACo6+XJP///OQFFgAIIJbvd23//z/NyPD/NQPDg8uS/wECiIlT+TDjr5/sDK9ZrjMo6D5nBAgguLYPC13/f7nN+v/bQ7H/P77awM0DCCAWGOPLp58MfE80GFiE+RiYOCXhGgECiAlE3PZI/i8iL8bAchMocV2C4d/+fwyPj2qBTQEIIBR02S7+/4N1AigSAAHECPcLyB9/OBkY/rMxMLxkYRDMvwWWAwggJpgCDidZBlazzwzsVg8ZGAXU4SYABBDckYy/2BmYvgsyMLLxMPz+g7AFIIAQCr6zA+0B+oCLn+HHV0Q4AgQQ48MTUv8FvwszsLwUhHhLlIeBkQ+oT+IXw8Pa3wwAAcQkb/GM8f2fbwwMr4CO+8ABDBABBua3wgzP8qQY1BbsZQQIILAj5V3vMj6Tv8Dw8/VbBqZ/nxjuT2BiUFw/D+wLgABCQXeX8v+/5pyAEg4AAYSh6v0il/+cMeIM/9+/YGBgZmNgZOSGKOSTYvi25A6DYOw2FD0AAcSCbsCfX38Y/n+4x/D37R0GZiY2hn/sQN//+8LAzGgClGPCcBVAAGEa8O8/A9MnVoZ/77gZ/gH5zHwCDP//czAwcnID5T5jGAAQQCx3o0L/s/znBXP+/fvD8E/sGgPjJ14GxrdCDAxszMBwBQYrAz8DAx8TA7P8d4anaXH/mf8yMfz/y87w6/9zBoAAYoSlJrbiAwzi7wwY/r38CNSIcCqTFB+E/wvonu//GVj4+Rie855k+NtjzaCwfjYjQAChBMhNt5T/7IV7GaTf6jD8fAZx7h9xXgZ2RmYGVjFBsMYfzZYMqjvmwvUBBBBWBIqqW2t5/n+eo/X/6zKj//d38v4HuRKbWoAAwouOher8Pxmtg1cjQIABAFbt8Z32Ai5RAAAAAElFTkSuQmCC)' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); toolbaritem.addEventListener('click', event => { if (event.button == 0) { window.open('chrome://browser/content/downloads/contentAreaDownloadsView.xhtml', 'Downloads', 'chrome,resizable=yes,width=600,height=750,left=1220,top=100'); } }); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; })();
-
Ah, danke.
Und wenn das Türen sind, die man nicht öffnen muss, sollte man sie einfach geschlossen halten.
Wie wahr.
-
Gern geschehen. Entschuldige bitte, aber ich habe das Skript dreimal überflogen und die beiden Zeilen sind mir doch durch die Lappen gegangen.
-
Nur security.allow_unsafe_dangerous_privileged_evil_eval, nicht die anderen Optionen!
Ah, danke. Wozu sind denn dann die beiden anderen Optionen?
-
Das Skript verwendet in Zeile 12 noch die eval()-Funktion. Diese Funktion gilt schon seit vielen Jahren als unsicher. Gemäß der Content Security Policy von Mozilla funktioniert diese Funktion nicht mehr. Derzeit hat Mozilla eine Zwischenlösung zur Verfügung gestellt, die den Gebrauch dieser Funktion wieder gestattet.
Gib in about:config „eval“ in das Suchfeld ein und du findest u. a. die Einstellung security.allow_unsafe_dangerous_privileged_evil_eval. Setze die Einstellung auf true. Dann solltest du das Skript wieder verwenden können.
Die Zeile 12 mit der eval()-Funktion müsste umgeschrieben werden, da habe ich aber im Moment keinen blassen Schimmer, wie man das machen muss. Irgendwann werden die Einstellungen in about:config wegfallen, ich hoffe, dass sich bis dahin jemand gefunden hat, der die Zeile umschreiben konnte.
-
Probiere mal diese Version:
JavaScript
Alles anzeigen//Author @aborix - Tab schließen + Kontextmenü auch in dem Einstellungsfenster //Erklärung von Sören https://www.camp-firefox.de/forum/thema/112673-userchrome-js-scripte-f%C3%BCr-den-fuchs-diskussion/?postID=1247653#post1247653 //angepasst von @milupo Zeile 22 > 8.10.2024 ab Fx 132 > tabbrowser-tabbox statt appcontent (function() { if (!window.gBrowser) return; var contextMenu = document.getElementById('contentAreaContextMenu'); var menuseparator = document.createXULElement('menuseparator'); menuseparator.id = 'context-sep-closetab'; contextMenu.append(menuseparator); var menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-closetab'; menuitem.setAttribute('label', 'Tab schließen'); //menuitem.setAttribute('oncommand', 'gBrowser.removeCurrentTab();'); menuitem.addEventListener('click', () => { BrowserCommands.closeTabOrWindow(); }); contextMenu.append(menuitem); var appcontent = document.getElementById('tabbrowser-tabbox'); appcontent.addEventListener('contextmenu', event => { setTimeout(() => { if (gContextMenu && !gContextMenu.shouldDisplay) { for (let string of 'back forward reload bookmarkpage'.split(' ')) { document.getElementById('context-' + string).removeAttribute('hidden'); } document.getElementById('context-stop').setAttribute('hidden', 'true'); const A = 'navigation sep-navigation savepage sep-paste selectall sep-viewsource viewsource viewinfo sep-bidi inspect-a11y inspect sep-closetab closetab'.split(' '); for (let node of contextMenu.childNodes) { if (A.includes(node.id.substring(8))) node.removeAttribute('hidden'); else node.setAttribute('hidden', 'true'); } contextMenu.openPopupAtScreen(event.screenX, event.screenY, true, event); } }, 50); }); })();
-
Probiere mal:
JavaScript
Alles anzeigen// Angepasst durch aborix // ab Fx 133 wird in den Zeilen 57 und 58 pinnedTabCount statt _numPinnedTabs verwendet (function() { if (window.__SSi != 'window0') return; const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { BrowserGlue: "resource:///modules/BrowserGlue.sys.mjs" }); lazy.BrowserGlue.prototype._onQuitRequest = function BG__onQuitRequest(aCancelQuit, aQuitType) { // If user has already dismissed quit request, then do nothing if (aCancelQuit instanceof Ci.nsISupportsPRBool && aCancelQuit.data) { return; } // There are several cases where we won't show a dialog here: // 1. There is only 1 tab open in 1 window // 2. browser.warnOnQuit == false // 3. The browser is currently in Private Browsing mode // 4. The browser will be restarted. // 5. The user has automatic session restore enabled and // browser.sessionstore.warnOnQuit is not set to true. // 6. The user doesn't have automatic session restore enabled // and browser.tabs.warnOnClose is not set to true. // // Otherwise, we will show the "closing multiple tabs" dialog. // // aQuitType == "lastwindow" is overloaded. "lastwindow" is used to indicate // "the last window is closing but we're not quitting (a non-browser window is open)" // and also "we're quitting by closing the last window". if (aQuitType == "restart" || aQuitType == "os-restart") { return; } // browser.warnOnQuit is a hidden global boolean to override all quit prompts. if (!Services.prefs.getBoolPref("browser.warnOnQuit")) { return; } var windowcount = 0; var pagecount = 0; let pinnedcount = 0; for (let win of BrowserWindowTracker.orderedWindows) { if (win.closed) { continue; } windowcount++; let tabbrowser = win.gBrowser; if (tabbrowser) { pinnedcount += tabbrowser.pinnedTabCount; // bis Fx 132 wurde statt pinnedTabCount _numPinnedTabs verwendet pagecount += tabbrowser.visibleTabs.length - tabbrowser.pinnedTabCount; // bis Fx 132 wurde statt pinnedTabCount _numPinnedTabs verwendet } } // No windows open so no need for a warning. if (!windowcount) { return; } // browser.warnOnQuitShortcut is checked when quitting using the shortcut key. // The warning will appear even when only one window/tab is open. For other // methods of quitting, the warning only appears when there is more than one // window or tab open. let shouldWarnForShortcut = this._quitSource == "shortcut" && Services.prefs.getBoolPref("browser.warnOnQuitShortcut"); let shouldWarnForTabs = //pagecount >= 2 && Services.prefs.getBoolPref("browser.tabs.warnOnClose"); if (!shouldWarnForTabs && !shouldWarnForShortcut) { return; } if (!aQuitType) { aQuitType = "quit"; } let win = BrowserWindowTracker.getTopWindow(); // Our prompt for quitting is most important, so replace others. win.gDialogBox.replaceDialogIfOpen(); let titleId = { id: "tabbrowser-confirm-close-tabs-title", args: { tabCount: pagecount }, }; let quitButtonLabelId = "tabbrowser-confirm-close-tabs-button"; let closeTabButtonLabelId = "tabbrowser-confirm-close-tab-only-button"; let showCloseCurrentTabOption = false; if (windowcount > 1) { // More than 1 window. Compose our own message based on whether // the shortcut warning is on or not. if (shouldWarnForShortcut) { showCloseCurrentTabOption = true; titleId = "tabbrowser-confirm-close-warn-shortcut-title"; quitButtonLabelId = "tabbrowser-confirm-close-windows-warn-shortcut-button"; } else { titleId = { id: "tabbrowser-confirm-close-windows-title", args: { windowCount: windowcount }, }; quitButtonLabelId = "tabbrowser-confirm-close-windows-button"; } } else if (shouldWarnForShortcut) { if (win.gBrowser.visibleTabs.length > 1) { showCloseCurrentTabOption = true; titleId = "tabbrowser-confirm-close-warn-shortcut-title"; quitButtonLabelId = "tabbrowser-confirm-close-tabs-with-key-button"; } else { titleId = "tabbrowser-confirm-close-tabs-with-key-title"; quitButtonLabelId = "tabbrowser-confirm-close-tabs-with-key-button"; } } // The checkbox label is different depending on whether the shortcut // was used to quit or not. let checkboxLabelId; if (shouldWarnForShortcut) { const quitKeyElement = win.document.getElementById("key_quitApplication"); const quitKey = ShortcutUtils.prettifyShortcut(quitKeyElement); checkboxLabelId = { id: "tabbrowser-ask-close-tabs-with-key-checkbox", args: { quitKey }, }; } else { checkboxLabelId = "tabbrowser-ask-close-tabs-checkbox"; } const [title, quitButtonLabel, checkboxLabel] = win.gBrowser.tabLocalization.formatMessagesSync([ titleId, quitButtonLabelId, checkboxLabelId, ]); // Only format the "close current tab" message if needed let closeTabButtonLabel; if (showCloseCurrentTabOption) { [closeTabButtonLabel] = win.gBrowser.tabLocalization.formatMessagesSync([ closeTabButtonLabelId, ]); } let warnOnClose = { value: true }; let flags; if (showCloseCurrentTabOption) { // Adds buttons for quit (BUTTON_POS_0), cancel (BUTTON_POS_1), and close current tab (BUTTON_POS_2). // Also sets a flag to reorder dialog buttons so that cancel is reordered on Unix platforms. flags = (Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 + Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1 + Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_2) | Services.prompt.BUTTON_POS_1_IS_SECONDARY; Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1; } else { // Adds quit and cancel buttons flags = Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 + Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1; } // 1 Fenster mit höchstens 1 nicht angehefteter Tab if (windowcount == 1 && pagecount < 2 && this._quitSource != "shortcut") { title.value = "Fenster schließen?"; quitButtonLabel.value = "Schließen"; checkboxLabel.value = null; } let buttonPressed = Services.prompt.confirmEx( win, title.value, null, flags, quitButtonLabel.value, null, showCloseCurrentTabOption ? closeTabButtonLabel.value : null, checkboxLabel.value, warnOnClose ); // If the user has unticked the box, and has confirmed closing, stop showing // the warning. if (buttonPressed == 0 && !warnOnClose.value) { if (shouldWarnForShortcut) { Services.prefs.setBoolPref("browser.warnOnQuitShortcut", false); } else { Services.prefs.setBoolPref("browser.tabs.warnOnClose", false); } } // Close the current tab if user selected BUTTON_POS_2 if (buttonPressed === 2) { win.gBrowser.removeTab(win.gBrowser.selectedTab); } this._quitSource = "unknown"; aCancelQuit.data = buttonPressed != 0; } })();