Wenn sie noch funktioniert, sie ist immerhin 4 Jahre alt.
Beiträge von milupo
-
-
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; } })(); -
Hier hat jemand auf Bugzilla ein Ticket eröffnet:
1963549 - Sidebar bookmarks no longer open automatically since the last update.UNCONFIRMED (nobody) in Firefox - Sidebar. Last updated 2025-04-30.bugzilla.mozilla.org -
Hallo,
probiere mal folgende Version:
JavaScript
Alles anzeigen// buttonCloseTab.uc.js - Button > Firefox Tabs schliessen (function() { if (!window.gBrowser) return; try { CustomizableUI.createWidget({ id: 'fp-closetabs', 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: 'fp-closetabs', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Aktuellen Tab schließen', tooltiptext: 'Aktuellen Tab schließen', style: 'list-style-image: url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" color="dodgerblue" width="12" height="12" viewBox="0 0 16 16"><path fill="currentColor" fill-opacity="context-fill-opacity" d="M9.414 8l5.293-5.293a1 1 0 0 0-1.414-1.414L8 6.586 2.707 1.293a1 1 0 0 0-1.414 1.414L6.586 8l-5.293 5.293a1 1 0 1 0 1.414 1.414L8 9.414l5.293 5.293a1 1 0 0 0 1.414-1.414z"></path></svg>\')', // onclick: 'if (event.button == 0) { \ // BrowserCommands.closeTabOrWindow();\ // }; ' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); toolbaritem.addEventListener('click', event => { if (event.button == 0) { BrowserCommands.closeTabOrWindow(); }; }); return toolbaritem; } }); } catch(e) { }; })(); -
Ein kleiner Fortschritt: Mit der Änderung von Inline-Eventhandler in die Methode mit addEventListener ist es wenigstens möglich in Fx 138 die drei Aktionen aus dem Symbol in der Symbolleiste auszuführen, siehe Zeilen 180 bis 183 in folgender Version. Die Menüeinträge konnte ich noch nicht umbauen, mit den Inline-Eventhandlern werden sie wenigstens angezeigt.
JavaScript
Alles anzeigen// ==UserScript== // @name AddOnLister.uc.js // @compatibility Firefox 36.*, 37.*, 60.*, 63.* // @include main // @version 1.0.20181102 // ==/UserScript== var ADONLI = { // ----- Start Konfiguration // folgende Add-ons nicht auflisten Beispiel: ["InfoLister","AddOnLister.uc.js"] BLACKLIST: [], // einige Tests der Konfiguration durchführen (true oder false)? CHECKCONFIG: true, // ans eigene System anpassen - Pfad mit Verzeichnistrenner abschliessen. Unter Windows den \ bitte verdoppeln EXPORTPATH: "D:\\Addonlister\\", //Dateinamen ohne(!) Erweiterung eingeben - diese wird weiter unten im Wert "fileext" pro Ausgabeformat definiert EXPORTFILE: "addonlister", // Ausgabeformat bbcode, html oder custom FORMAT: "html", // Erstellungsdatum anzeigen (true oder false) SHOWDATE: true, // Useragent anzeigen (true oder false) SHOWUSERAGENT: true, // Versuche folgende userChromeJS-Skripte *nicht* mit GitHub zu verlinken, weil nicht gewünscht oder möglich. ["*"] für gar keine Verlinkung GITHUBBLACKLIST: ["about-config.uc.js", "about-plugins.uc.js" ,"AddonsSidebar.uc.xul", "autopopupablepatch1.uc.js", "autopopupablepatch3.uc.js", "Chronik-Lesezeichen.uc.js", "Close-other-tabs.uc.js", "ContextHistory.uc.xul", "CustomAppMenu.uc.js", "Download-button.uc.js", "Einstellungen-Customize.uc.js", "element_inspector.uc.js", "Entwickler-Werkzeug.uc.js", "expandsidebar40.uc.js", "favicon-about-plugins.uc.js", "feedbutton-urlbar.uc.js", "Fehlerkonsole.uc.js", "Link-per-Email.uc.js", "liste-leeren.uc.js", "memorymonitor.uc.js", "open-folder.uc.js", "OpenDownloadFolderButtonM.uc.js", "OpenLibraryContextMenu.uc.xul", "Preferences.uc.js", "RestartFirefox_plus.uc.js", "savefoldermodoki.uc.xul", "scrollTotop-bottom.uc.js", "searchplugin-4-aboutconfig.uc.js", "speedupErrorConsole.uc.js", "Statusbar-Date.uc.js", "Stylish-Fenster-Sidebar.uc.js", "Tabmixplus-Einstelungen-in-Tabkontext.uc.js", "Tabmixplus-Options.uc.js", "ucjs_PrivateToolMenus-APP.uc.js", "ucjs_statusbar_zoom_panel_1.3.uc.js", "WebDeveloper-Menu.uc.js"], // In der folgenden Zeile den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen: TEXTOPENEXE : 'D:\\Programme\\Notepad++-8.7.5\\notepad++.exe', // Aufzulistende Add-On-Typen festlegen - möglich sind: ["extension","theme","plugin","dictionary","service","userstyle","greasemonkey-user-script","userchromejs"] WHICHTYPES: ["extension","theme","plugin","dictionary","userchromejs"], // ----- Ende Konfiguration // ----- Start Expertenkonfiguration ICON_URL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACGUlEQVR42mL8//8/AzJYtWy+G5ByB2IrINaECl8H4mNAvDMsKnEXsnqAAGIEGXDv1nmGM2cuKAD5OUCcAcTcDNjBVyCeAcRTTEwMHiipGTIABBALSBSquRmIY5iZmT8ICvI/FxQU4OHm5mID6/r67df79x++vH//kfPv37/FQCFxoJ5aoAEPAAKIBWoyyOYYdnb2Z9LSkqxCQgKSyNby8/OxAzEvH9+H10+fPn/28+fPGKDwSyAuAQggZi01eZCfu4E2f5OVlWYAahaFaTx95jyDnaM3Ax8fL4OhgS4DJycHNysr649Pnz7/Bnrd/OrlC2cAAogJGmDcQGd/Q9YMAv8YORmSkpIY+Hh54GIgNSC10HByBwggFmhoMwD9LIgeYrKSAgz+Ps4MOtqaKOIgtW/evAMxrQACiAkWVcAAY0JWBHQmg7d/ONgb6ABJrSZAADHhiC6G3Xv2gw1xdXFgwAcAAogJmkhAUfUPWeL+w8cMamoqDDLSUgxMbKi+Q1J7HSCAmKApjAEYz++RFV2/fouBg52dYeXqDQzHj+xGMQBJ7TGAAAIZsBNkKDCRcL179+E1TJGXpysDCysbw4dPPxjMzUzgmkFqQGqhqXInQACBkzIw/fcAOcVICUkUm39BmoEJ6TcwIUkBub3AfFECEECwlDgFlDxBKezhw8cfPn36hC8pgwxfAtXDABBAFGcmgABipDQ7AwQYAOqo3UvZE3l2AAAAAElFTkSuQmCC", MYTPLS:{ 'html': //für Darstellung als vollständiges html5-Dokument { 'fileext':'html', 'opendatauri': false, 'intro':'<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n' +'<title>Meine Firefox-Informationen</title>\n</head>\n<body>\n<h1>Meine Firefox-Informationen</h1>\n', 'tpllastupd':'<div>\nLetzte Aktualisierung: %%lastupd%%\n</div>', 'tpluseragent':'<div>\nUser Agent: %%useragent%%\n</div>', 'tpladdongrp_title':{ 'extension':'<div id="extensions">\n<h2>Erweiterungen <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>', 'theme':'<div id="themes">\n<h2>Themes <small>(%%count%%)</small></h2>', 'plugin':'<div id="plugins">\n<h2>Plugins <small>(%%count%%)</small></h2>', 'dictionary':'<div id="dictionaries">\n<h2>Wörterbücher <small>(%%count%%)</small></h2>', 'service':'<div id="services">\n<h2>Dienste <small>(%%count%%)</small></h2>', 'userstyle':'<div id="userstyles">\n<h2>Userstyles <small>(%%count%%)</small></h2>', 'greasemonkey-user-script':'<div id="gmscripts">\n<h2>Greasemonkey <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>', 'userchromejs':'<div id="userchromejs">\n<h2>userChromeJS <small>(%%count%%)</small></h2>' }, 'tpladdongrp_intro':{ 'default':'', 'greasemonkey-user-script':'<p>Greasemonkey-Skripte können Webseiten um diverse Funktionen erweitern.</p>', 'userchromejs':'<p>Durch die Erweiterung <a href="http://userchromejs.mozdev.org/">userChromeJS</a> eingebundene Skripte ergänzen den Firefox um diverse Funktionen.</p>' }, 'tpladdongrp_list_intro':{ 'default':'<ul>' }, 'tpladdon':'<li class="%%class%%"><a href="%%homepageURL%%">%%name%%</a> %%version%%: %%description%%%%disabled%%</li>\n', 'tpladdon_without_url':'<li class="%%class%%">%%name%% %%version%%: %%description%%%%disabled%%</li>\n', 'activeclass':'addonactive', 'inactiveclass':'addoninactive', 'disabledtext':'<small><span style="color:#ff0000;">[deaktiviert]</span></small>', 'tpladdongrp_list_outro':'</ul>\n', 'tpladdongrp_outro':'</div>\n\n', 'outro':'</body>\n</html>' }, 'bbcode': //für Postings in Foren, die bbcode unterstützen { 'fileext':'txt', 'opendatauri': true, 'intro':'Meine Firefox-Informationen\n\n', 'tpllastupd':'Letzte Aktualisierung: %%lastupd%%', 'tpluseragent':'User Agent: %%useragent%%\n', 'tpladdongrp_title':{ 'extension':'[b]Erweiterungen[/b] (aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)', 'theme':'[b]Themes[/b] (%%count%%)', 'plugin':'[b]Plugins[/b] (%%count%%)', 'dictionary':'[b]Wörterbücher[/b] (%%count%%)', 'service':'[b]Dienste[/b] (%%count%%)', 'userstyle':'[b]Userstyles[/b] (%%count%%)', 'greasemonkey-user-script':'[b]Greasemonkey[/b] (aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)', 'userchromejs':'[b]userChromeJS[/b] (%%count%%)' }, 'tpladdongrp_intro':{ 'default':'', 'greasemonkey-user-script':'Greasemonkey-Skripte können Webseiten um diverse Funktionen erweitern.', 'userchromejs':'Durch die Erweiterung [url=http://userchromejs.mozdev.org/]userChromeJS[/url] eingebundene Skripte ergänzen den Firefox um diverse Funktionen.' }, 'tpladdongrp_list_intro':{ 'default':'[list]' }, 'tpladdon':'[*][url=%%homepageURL%%]%%name%%[/url] %%version%%: %%description%%%%disabled%%\n', 'tpladdon_without_url':'[*]%%name%% %%version%%: %%description%%%%disabled%%\n', 'activeclass':'addonactive', 'inactiveclass':'addoninactive', 'disabledtext':' [color=red][deaktiviert][/color]', 'tpladdongrp_list_outro':'[/list]\n', 'tpladdongrp_outro':'\n', 'outro':'' }, 'custom': //Beispiel - für Darstellung als "include" in einem anderen (x)html-Dokument { 'fileext':'txt', 'opendatauri': true, 'intro':'<p id="bsbuttons">\n' +'<a class="tab active" href="http://www.ardiman.de/sonstiges/fxconfig.html?mode=windows">Windows 7</a>\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html?mode=ubuntu">XUbuntu</a>\n' +'</p>\n' +'<div id="buttons">\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#extensions">Erweiterungen</a>\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#themes">Themes</a>\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#plugins">Plugins</a>\n' //+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#dictionaries">Wörterbücher</a>\n' //+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#services">Dienste</a>\n' //+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#userstyles">Userstyles</a>\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#gmscripts">Greasemonkey</a>\n' +'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#userchromejs">userChromeJS</a>\n' +'<br/></div>\n', 'tpllastupd':'<div class="lastupd">\nLetzte Aktualisierung: %%lastupd%%\n</div>', 'tpluseragent':'<div class="useragent">\nUser Agent: %%useragent%%\n</div>', 'tpladdongrp_title':{ 'extension':'<div id="extensions" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_extensions.png" />Erweiterungen <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>', 'theme':'<div id="themes" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_themes.png" />Themes <small>(%%count%%)</small></h2>', 'plugin':'<div id="plugins" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_plugins.gif" />Plugins <small>(%%count%%)</small></h2>', 'dictionary':'<div id="dictionaries" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_dictionaries.png" />Wörterbücher <small>(%%count%%)</small></h2>', 'service':'<div id="services" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_services.png" />Dienste <small>(%%count%%)</small></h2>', 'userstyle':'<div id="userstyles" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_styles.png" />Userstyles <small>(%%count%%)</small></h2>', 'greasemonkey-user-script':'<div id="gmscripts" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_monkey.png" />Greasemonkey <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>', 'userchromejs':'<div id="userchromejs" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_javascript.gif" />userChromeJS <small>(%%count%%)</small></h2>' }, 'tpladdongrp_intro':{ 'default':'', 'greasemonkey-user-script':'<p>Einige Skripte stammen direkt von mir (s. auch <a href="http://www.ardiman.de/sonstiges/fxconfig/gmskripte.html">Greasemonkey-Skripte</a> bzw. <a class="extlink" href="https://openuserjs.org/users/ardiman/scripts" rel="nofollow">https://openuserjs.org/users/ardiman/scripts</a>), andere wurden nur geringfügig angepasst.</p>', 'userchromejs':'<p id="fxcuclisteintro">Durch die Erweiterung userChromeJS eingebundene Skripte ergänzen den Firefox um diverse Funktionen.</p>' }, 'tpladdongrp_list_intro':{ 'default':'<ul>', 'userchromejs':'<ul id="fxcucliste">' }, 'tpladdon':'<li class="%%class%%"><a href="%%homepageURL%%" rel="nofollow" class="extlink">%%name%%</a> %%version%%: %%description%%%%disabled%%</li>\n', 'tpladdon_without_url':'<li class="%%class%%">%%name%% %%version%%: %%description%%%%disabled%%</li>\n', 'activeclass':'addonactive', 'inactiveclass':'addoninactive', 'disabledtext':' <small>[deaktiviert]</small>', 'tpladdongrp_list_outro':'</ul>\n', 'tpladdongrp_outro':'</div>\n\n', 'outro':'' } }, // ----- Ende Expertenkonfiguration MYSTOR: {}, FILEUTILS: ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils, init: function() { // legt verschiebbaren Button und Menü unter Extras an // Button if (location != "chrome://browser/content/browser.xhtml") return; try { CustomizableUI.createWidget({ id: 'adonli-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 attributes = { id: 'adonli-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: 'true', label: 'AddonLister', tooltiptext: 'AddOnLister starten (Erstellung im Format »'+ADONLI.FORMAT+'«):\nLinksklick öffnet Ergebnis im Editor\nMittelklick öffnet Ergebnis als Tab im Browser\nRechtsklick exportiert die Liste ohne Anzeige im Editor oder Browser', style: 'list-style-image: url(' + ADONLI.ICON_URL + ')', //onclick: 'event.preventDefault(); return ADONLI.launch(event.button, \"' + ADONLI.FORMAT +'\");' }; for (var a in attributes) toolbaritem.setAttribute(a, attributes[a]); toolbaritem.addEventListener('click', function() { event.preventDefault(); return ADONLI.launch(event.button, ADONLI.FORMAT); }); return toolbaritem; } }); } catch(e) { }; // Menü function addNode(parentId, type, attributes) { let node = document.createXULElement(type); for (let a in attributes) { node.setAttribute(a, attributes[a]); }; document.getElementById(parentId).appendChild(node); }; addNode("menu_ToolsPopup", "menu", { id: "menu_ucjsAddonLister", accesskey: "L", label: "AddonLister", class: "menu-iconic", style: "list-style-image: url(" + ADONLI.ICON_URL + ")" }); document.getElementById("menu_ToolsPopup") .insertBefore(document.getElementById("menu_ucjsAddonLister"), document.getElementById("menu_openAddons").nextSibling); addNode("menu_ucjsAddonLister", "menupopup", { id: "menu_ucjsAddonLister-popup" }); addNode("menu_ucjsAddonLister-popup", "menu", { id: "menu_ucjsAddonLister-bbcode", accesskey: "B", label: "BBCODE", class: "menu-iconic" }); addNode("menu_ucjsAddonLister-bbcode", "menupopup", { id: "menu_ucjsAddonLister-popup-bbcode" }); addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", { id: "menu_ucjsAddonLister_editor-bbcode", class: "menAddonLister_item", oncommand: "ADONLI.launch(0,\'bbcode\')", accesskey: "E", label: "Liste erstellen und im Editor anzeigen" }); addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", { id: "menu_ucjsAddonLister_browser-bbcode", class: "menAddonLister_item", oncommand: "ADONLI.launch(1,\'bbcode\')", accesskey: "A", label: "Liste erstellen und im Browser anzeigen" }); addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", { id: "menu_ucjsAddonLister_write-bbcode", class: "menAddonLister_item", oncommand: "ADONLI.launch(2,\'bbcode\')", accesskey: "o", label: "Liste erstellen ohne Anzeige" }); addNode("menu_ucjsAddonLister-popup", "menu", { id: "menu_ucjsAddonLister-html", accesskey: "H", label: "HTML", class: "menu-iconic" }); addNode("menu_ucjsAddonLister-html", "menupopup", { id: "menu_ucjsAddonLister-popup-html" }); addNode("menu_ucjsAddonLister-popup-html", "menuitem", { id: "menu_ucjsAddonLister_editor-html", class: "menAddonLister_item", oncommand: "ADONLI.launch(0,\'html\')", accesskey: "E", label: "Liste erstellen und im Editor anzeigen" }); addNode("menu_ucjsAddonLister-popup-html", "menuitem", { id: "menu_ucjsAddonLister_browser-html", class: "menAddonLister_item", oncommand: "ADONLI.launch(1,\'html\')", accesskey: "A", label: "Liste erstellen und im Browser anzeigen" }); addNode("menu_ucjsAddonLister-popup-html", "menuitem", { id: "menu_ucjsAddonLister_write-html", class: "menAddonLister_item", oncommand: "ADONLI.launch(2,\'html\')", accesskey: "o", label: "Liste erstellen ohne Anzeige" }); addNode("menu_ucjsAddonLister-popup", "menu", { id: "menu_ucjsAddonLister-custom", accesskey: "C", label: "Custom", class: "menu-iconic" }); addNode("menu_ucjsAddonLister-custom", "menupopup", { id: "menu_ucjsAddonLister-popup-custom" }); addNode("menu_ucjsAddonLister-popup-custom", "menuitem", { id: "menu_ucjsAddonLister_editor-custom", class: "menAddonLister_item", oncommand: "ADONLI.launch(0,\'custom\')", accesskey: "E", label: "Liste erstellen und im Editor anzeigen" }); addNode("menu_ucjsAddonLister-popup-custom", "menuitem", { id: "menu_ucjsAddonLister_browser-custom", class: "menAddonLister_item", oncommand: "ADONLI.launch(1,\'custom\')", accesskey: "A", label: "Liste erstellen und im Browser anzeigen" }); addNode("menu_ucjsAddonLister-popup-custom", "menuitem", { id: "menu_ucjsAddonLister_write-custom", class: "menAddonLister_item", oncommand: "ADONLI.launch(2,\'custom\')", accesskey: "o", label: "Liste erstellen ohne Anzeige" }); addNode("menu_ucjsAddonLister-popup", "menuitem", { tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«", id: "menu_ucjsAddonLister_editor", class: "menAddonLister_item", oncommand: "ADONLI.launch(0,\'" + ADONLI.FORMAT + "\')", accesskey: "E", label: "Liste erstellen und im Editor anzeigen" }); addNode("menu_ucjsAddonLister-popup", "menuitem", { tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«", id: "menu_ucjsAddonLister_browser", class: "menAddonLister_item", oncommand: "ADONLI.launch(1,\'" + ADONLI.FORMAT + "\')", accesskey: "A", label: "Liste erstellen und im Browser anzeigen" }); addNode("menu_ucjsAddonLister-popup", "menuitem", { tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«", id: "menu_ucjsAddonLister_write", class: "menAddonLister_item", oncommand: "ADONLI.launch(2,\'" + ADONLI.FORMAT + "\')", accesskey: "o", label: "Liste erstellen ohne Anzeige" }); }, launch: function(e,format) { // ruft alle noetigen Funktionen nach Klick auf Toolbarbutton auf var ctrlConf = ""; if (this.CHECKCONFIG) ctrlConf = this.configCheck(); if (ctrlConf === "") { var expfile = this.EXPORTPATH + this.EXPORTFILE + "." + this.MYTPLS[format].fileext; this.getOtherValues(); this.resetStor(); this.getAddons(); if (this.WHICHTYPES.indexOf('userchromejs') !== -1) this.getScripts(); var result = this.writeAddons(expfile,format); this.showAddons(e,this.TEXTOPENEXE,expfile,format,result); } else { alert ("Lt. Konfigurationstest des AddonListers muss folgendes kontrolliert werden:\n" + ctrlConf); } }, configCheck: function() { var fehler = ""; // Kontrolle des Pfades if (this.EXPORTPATH.substr(-1) !== "\\" && this.EXPORTPATH.substr(-1) !== "/") fehler += "\n - Der Pfad in EXPORTPATH endet nicht mit einem Verzeichnistrenner."; if (!this.fileExists(this.EXPORTPATH)) fehler += "\n - Der Pfad »" + this.EXPORTPATH + "« in EXPORTPATH existiert nicht."; // Kontrolle des Dateinamens if (this.EXPORTFILE.indexOf(".") !== -1) fehler += "\n - Der Dateiname in EXPORTFILE sollte keinen Punkt enthalten (ohne Erweiterung sein)."; if (this.EXPORTFILE.length === 0) fehler += "\n - Es wurde kein Dateiname in EXPORTFILE hinterlegt."; // Kontrolle des Formates var formate = ["bbcode", "custom", "html"]; if (formate.indexOf(this.FORMAT) === -1) fehler += "\n - Ungültiges FORMAT »" + this.FORMAT + "«."; // Kontrolle des Editors if (!this.fileExists(this.TEXTOPENEXE)) { var pref = Cc["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); if (!this.fileExists(pref.getCharPref("view_source.editor.path"))) { fehler += "\n - Der in TEXTOPENEXE und about:config [view_source.editor.path] hinterlegte Editor kann nicht gefunden werden."; } } // Kontrolle der gewünschten Addon-Typen, folgende sind momentan gültig: var addontypes = ["extension","theme","plugin","dictionary","service","userstyle","greasemonkey-user-script","userchromejs"]; var w; for (w = 0; w < this.WHICHTYPES.length; w++) { if (addontypes.indexOf(this.WHICHTYPES[w]) === -1) { fehler += "\n - In WHICHTYPES wurden ein oder mehrere unbekannte Add-on-Typen (z.B. »" + this.WHICHTYPES[w] + "«) gewählt."; break; } } return fehler; }, fileExists: function(mypath) { // kontrolliert, ob Pfad oder Datei gültig/vorhanden ist var file = new this.FILEUTILS.File(mypath); return file.exists(); }, resetStor: function() { // setzt das JSON-Object (bzw. die "Listen" darin) zurueck var h; for (h = 0; h < this.WHICHTYPES.length; h++) { this.MYSTOR[this.WHICHTYPES[h]] = []; } }, getOtherValues: function() { // speichert momentan Auswertungsdatum und useragent im JSON-Object var options; options = {weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hour12: false}; if (this.SHOWDATE) this.MYSTOR["lastupd"] = new Date().toLocaleDateString("de-DE", options); if (this.SHOWUSERAGENT) this.MYSTOR["useragent"] = window.navigator.userAgent; }, getAddons: function() { // speichert die gewaehlten Addons (s. WHICHTYPES) im JSON-Object var i, x, j, iAo, Addons, added, storedItems; AddonManager.getAddonsByTypes(this.WHICHTYPES).then(function(addonlist) { Addons = addonlist; }); var thread = Cc['@mozilla.org/thread-manager;1'].getService().mainThread; while (Addons === void(0)) { thread.processNextEvent(true); } // Schleife ueber Addons for (i = 0; i < Addons.length; i++) { iAo = Addons[i]; added = false; storedItems = this.MYSTOR[iAo.type].length; // nächste Aktionen nur, wenn Addon *nicht* in BLACKLIST steht if (this.BLACKLIST.indexOf(iAo.name) === -1) { // Ablage gleich sortiert vornehmen for (j = 0; j < storedItems; j++) { if (iAo.name.toLowerCase() < this.MYSTOR[iAo.type][j].name.toLowerCase()) { this.MYSTOR[iAo.type].splice(j,0,{ 'name': iAo.name, 'version': iAo.version, 'active': iAo.isActive, 'homepage': iAo.homepageURL}); added = true; break; } } if (!added) this.MYSTOR[iAo.type].push({ 'name': iAo.name, 'version': iAo.version, 'active': iAo.isActive, 'homepage': iAo.homepageURL}); } } }, getScripts: function() { // speichert ggf. im Chrome-Ordner vorhandene uc.js und uc.xul-Dateien im JSON-Object var hp, j, storedItems, added; // Suchmuster, also die Dateierweiterungen uc.js und uc.xul let extjs = /\.uc\.js$/i; let extxul = /\.uc\.xul$/i; let aFolder = Cc["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile); // files mit Eintraegen im Chrome-Ordner befuellen let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); // Ordner bzw. Dateien durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); // keine gewuenschte Datei, deshalb continue if ((!extjs.test(file.leafName) && !extxul.test(file.leafName)) || this.BLACKLIST.indexOf(file.leafName) !== -1) continue; // uc.js bzw. uc.xul gefunden, die nicht in der Blacklist stehen -> Ablage sortiert (unter Linux erforderlich) im JSON vornehmen hp = this.githubLink(file.leafName); added = false; storedItems = this.MYSTOR.userchromejs.length; for (j = 0; j < storedItems; j++) { if (file.leafName.toLowerCase() < this.MYSTOR.userchromejs[j].name.toLowerCase()) { this.MYSTOR.userchromejs.splice(j,0,{'name': file.leafName, 'version': undefined, 'active': true, 'description': undefined, 'homepage': hp}); added = true; break; } } if (!added) this.MYSTOR.userchromejs.push({'name': file.leafName, 'version': undefined, 'active': true, 'description': undefined, 'homepage': hp}); } }, githubLink: function(sName) { // übergibt für gegebenen Skriptnamen den Link zu github // früher Ausstieg, da Skript nicht verlinkt werden soll if (this.GITHUBBLACKLIST.indexOf(sName) !== -1 || this.GITHUBBLACKLIST.indexOf("*") !== -1) return null; sName = sName.toLowerCase(); /* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen: /Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/ / "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen */ var regs = [/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/]; for (var i = 0; i < regs.length; i++) { sName = sName.replace(regs[i],""); } return "https://github.com/ardiman/userChrome.js/tree/master/" + sName; }, writeAddons: function(file,format){ var a, t, c, n, d, atype, aout, thisaddon; var output = ""; var addontpl = ""; var addontplwithouturl = ""; addontpl = this.MYTPLS[format].tpladdon; addontplwithouturl = this.MYTPLS[format].tpladdon_without_url; output += this.MYTPLS[format].intro; if (this.SHOWDATE) output += this.MYTPLS[format].tpllastupd.replace(/%%lastupd%%/g,this.MYSTOR.lastupd)+"\n"; if (this.SHOWUSERAGENT) output += this.MYTPLS[format].tpluseragent.replace(/%%useragent%%/g,this.MYSTOR.useragent)+"\n"; for (t = 0; t < this.WHICHTYPES.length; t++) { atype = this.WHICHTYPES[t]; c = this.MYSTOR[atype].length; n = 0; d = 0; output += this.MYTPLS[format].tpladdongrp_title[atype].replace(/%%count%%/g,c)+"\n"; if (this.MYTPLS[format].tpladdongrp_intro[atype] == undefined) { output += this.MYTPLS[format].tpladdongrp_intro.default + (this.MYTPLS[format].tpladdongrp_intro.default.length > 0 ? "\n" : ""); } else { output += this.MYTPLS[format].tpladdongrp_intro[atype] + (this.MYTPLS[format].tpladdongrp_intro[atype].length > 0 ? "\n" : ""); } if (this.MYTPLS[format].tpladdongrp_list_intro[atype] == undefined) { output += this.MYTPLS[format].tpladdongrp_list_intro.default+"\n"; } else { output += this.MYTPLS[format].tpladdongrp_list_intro[atype]+"\n"; } for (a = 0; a < c; a++) { thisaddon = this.MYSTOR[atype][a]; // console.log(atype + " " + thisaddon.name + " " + thisaddon.active); if (thisaddon.homepage == undefined) { aout = addontplwithouturl; } else { aout = addontpl; aout = aout.replace(/%%homepageURL%%/g,thisaddon.homepage.replace(/&(?!amp;)/g,'&')); } aout = aout.replace(/%%name%%/g,thisaddon.name); if (thisaddon.version == undefined) { if (thisaddon.description != undefined) { aout = aout.replace(/ %%version%%: /g,": "); } else { aout = aout.replace(/ %%version%%: /g,""); } } aout = aout.replace(/%%version%%/g,thisaddon.version); if (thisaddon.description != undefined) { aout = aout.replace(/%%description%%/g,thisaddon.description); } else { aout = aout.replace(/%%description%%/g,""); } if (thisaddon.active !== true) { aout = aout.replace(/%%class%%/g,this.MYTPLS[format].inactiveclass); aout = aout.replace(/%%disabled%%/g,this.MYTPLS[format].disabledtext); d++; } else { aout = aout.replace(/%%class%%/g,this.MYTPLS[format].activeclass); aout = aout.replace(/%%disabled%%/g,""); n++; } output += aout; } output = output.replace(/%%countactive%%/g,n).replace(/%%countinactive%%/g,d); output += this.MYTPLS[format].tpladdongrp_list_outro; output += this.MYTPLS[format].tpladdongrp_outro; } output += this.MYTPLS[format].outro+"\n"; let encoder = new TextEncoder(); let myarray = encoder.encode(output); let promise = IOUtils.write(file, myarray); return output; }, showAddons: function(e,RanPath,OpenPath,format,myoutput) { // zeigt das EXPORTFILE im Editor oder im Browser (Mittelklick) an switch (e) { case 0: var file = new this.FILEUTILS.File(RanPath); var proc = Cc["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); var args = [OpenPath]; // falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen: if (!this.fileExists(RanPath)) { console.log("AddonLister meldet: Editor nicht gefunden, ausweichen auf about:config."); var pref = Cc["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); RanPath = pref.getCharPref("view_source.editor.path"); file = new this.FILEUTILS.File(RanPath); } proc.init(file); proc.run(false, args, args.length); break; case 1: if (this.MYTPLS[format].opendatauri) { var datastring = myoutput.replace(/\n/g,"%0A").replace(/#/g,"%23"); // getBrowser().selectedTab = getBrowser().addTrustedTab('data:text/plain;charset=utf-8,' + datastring); openTrustedLinkIn('data:text/plain;charset=utf-8,' + datastring, "tab"); XULBrowserWindow.statusTextField.label = "Export nach »"+ OpenPath + "« ist erfolgt."; } else { // alert sorgt ein wenig dafür, dem OS Zeit fürs Speichern der Datei zu geben ... alert("Export nach »"+ OpenPath + "« ("+ format + "-format) ist erfolgt."); openTrustedLinkIn(OpenPath, "tab"); //getBrowser().selectedTab = getBrowser().addTrustedTab(OpenPath); } break; default: XULBrowserWindow.statusTextField.label = "Export nach »"+ OpenPath + "« ist erfolgt."; break; } } }; ADONLI.init();In den Zeilen 16 und 28 müsst ihr noch eure Pfade anpassen (Export-Pfad und Pfad zum Editor).
-
danach dann alle Codes und sämtliche Scripte deaktiviert
Und was ist mit Erweiterungen? Die werden ebenfalls im Fehlerbehebungsmodus deaktiviert.
-
Also ihr werdet jetzt vielleicht lachen: Aber bei mir funktioniert das Skript im Nightly noch mit den Inline-Eventhandlern. Wenn ich das so umbauen versuche, wie das Mira_Belle versuchte, habe ich nur den Menüeintrag nebst Symbol und dem Untermenü BBCODE und darunter den ersten Menüeintrag, der aber nichts macht.
-
In Zeile 174 steht noch onclick. Darüber wird der Button erzeugt.
-
Bei mir funktioniert dein Skript auch. Sogar in Firefox 140 Nightly.
Hast du denn die Vorbereitung für das Funktionieren von Benutzerskripten auf allen Rechnern gemacht? Hat das Skript auf allen Rechnern bisher funktioniert?
-
-
Bitte testen.
Das Skript wurde jetzt zum dritten Mal angegeben. Das Skript ist nicht das Problem. grisu2099 hat die gleiche Skript-Version und die funktioniert bei mir auch. Also kann es nicht am Skript selbst liegen.
-
Ich habe schon alle CSS deaktiviert.
Ich glaube nicht, dass das mit CSS zu tun hat, eher mit Skripten. Ich habe hier zwei Skripte, das eine öffnet die Lesezeichen in der Sidebar und das andere die Chronik. Beide enthielten ursprünglich den Inline-Eventhandler onclick. Mozilla hat Inline-Eventhandler abgeschafft und deswegen könnten Skripte nicht mehr funktionieren, die solche Inline-Eventhandler noch enthalten. Und Firefox 138 ist meines Wissens die erste Version, in der keine Inline-Eventhandler mehr funktionieren.
-
keinerlei neue oder aktualisierte Add-Ons.
Und Benutzerskripte?