1. Startseite
  2. Nachrichten
  3. Herunterladen
    1. Thunderbird Release-Version
    2. Thunderbird 128 ESR
    3. Thunderbird 115 ESR
    4. Thunderbird Beta-Version
    5. Sprachpaket (Benutzeroberfläche)
    6. Wörterbücher (Rechtschreibprüfung)
  4. Hilfe & Lexikon
    1. Anleitungen zu Thunderbird
    2. Fragen & Antworten (FAQ) zu Thunderbird
    3. Hilfe zu dieser Webseite
  5. Forum
    1. Unerledigte Themen
    2. Letzte Beiträge
    3. Themen der letzten 24 Stunden
  • Anmelden
  • Registrieren
  • 
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Forum
  • Lexikon
  • Artikel
  • Seiten
  • Erweiterte Suche
  1. Thunderbird Mail DE
  2. Forum
  3. Hilfe zu Add-ons und manuellen Anpassungen
  4. Manuelle Anpassungen per CSS oder Script

Verschiedene Scripte funktionieren nicht mit TB 115*

    • 115.*
    • Windows
  • Boersenfeger
  • 15. Oktober 2023 um 17:29
  • Geschlossen
  • Erledigt
  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 15. Oktober 2023 um 17:29
    • #1

    Thunderbird 115.3.4b1

    Windows 10 64bit

    Wie angekündigt stelle ich hier einige Scripte zur Diskussion, die im TB 115 nicht mehr funktionieren und bitte um freundliche Unterstützung..

    JavaScript
    // ==UserScript==
    // @name UserCSSLoader
    (function(){
    
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
    if (!window.Services)
    Cu.import("resource://gre/modules/Services.jsm");
    // Wenn beim Start ein anderes Fenster angezeigt wird (das zweite Fenster), wird es beendet
    let list = Services.wm.getEnumerator("navigator:browser");
    while(list.hasMoreElements()){ if(list.getNext() != window) return; }
    
    if (window.UCL) {
    window.UCL.destroy();
    delete window.UCL;
    }
    
    window.UCL = {
    vFileManager: 'H:\\Total Commander\\TOTALCMD64.EXE',
    vFMParameter: '/T',
    USE_UC: "UC" in window,
    AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET,
    USER_SHEET : Ci.nsIStyleSheetService.USER_SHEET,
    AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET,
    readCSS : {},
    get disabled_list() {
    let obj = [];
    try {
    obj = this.prefs.getCharPref("disabled_list").split("|");
    } catch(e) {}
    delete this.disabled_list;
    return this.disabled_list = obj;
    },
    get prefs() {
    delete this.prefs;
    return this.prefs = Services.prefs.getBranch("UserCSSLoader.")
    },
    get styleSheetServices(){
    delete this.styleSheetServices;
    return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    },
    get FOLDER() {
    let aFolder;
    try {
    // UserCSSLoader.FOLDER verwenden
    let folderPath = this.prefs.getCharPref("FOLDER");
    aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
    aFolder.initWithPath(folderPath);
    } catch (e) {
    aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
    aFolder.appendRelativePath("CSS");
    }
    if (!aFolder.exists() || !aFolder.isDirectory()) {
    aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
    }
    delete this.FOLDER;
    return this.FOLDER = aFolder;
    },
    getFocusedWindow: function() {
    let win = document.commandDispatcher.focusedWindow;
    if (!win || win == window) win = content;
    return win;
    },
    
    init: function() {
    const cssmenu = $C("menu", {
    id: "usercssloader-menu",
    label: "CSS",
    accesskey: "C",
    onclick: "if (event.button == 1) UCL.rebuild()"
    });
    const menupopup = $C("menupopup", {
    id: "usercssloader-menupopup"
    });
    cssmenu.appendChild(menupopup);
    
    let menu = $C("menu", {
    label: "Style Loader Menü",
    accesskey: "M"
    });
    menupopup.appendChild(menu);
    let mp = $C("menupopup", { id: "usercssloader-submenupopup" });
    menu.appendChild(mp);
    mp.appendChild($C("menuitem", {
    label: "Styles importieren",
    accesskey: "R",
    acceltext: "Alt + R",
    oncommand: "UCL.rebuild();"
    }));
    mp.appendChild($C("menuseparator"));
    mp.appendChild($C("menuitem", {
    label: "CSS Datei erstellen",
    accesskey: "D",
    oncommand: "UCL.create();"
    }));
    mp.appendChild($C("menuitem", {
    label: "CSS Ordner öffnen",
    accesskey: "O",
    oncommand: "UCL.openFolder();"
    }));
    mp.appendChild($C("menuitem", {
    label: "userChrome.css bearbeiten",
    hidden: false,
    oncommand: "UCL.editUserCSS(\'userChrome.css\');"
    }));
    mp.appendChild($C("menuitem", {
    label: "userContent.css bearbeiten",
    hidden: false,
    oncommand: "UCL.editUserCSS(\'userContent.css\');"
    }));
    mp.appendChild($C("menuseparator"));
    mp.appendChild($C("menuitem", {
    label: "Style Test (Chrome)",
    id: "usercssloader-test-chrome",
    hidden: true,
    accesskey: "C",
    oncommand: "UCL.styleTest(window);"
    }));
    mp.appendChild($C("menuitem", {
    label: "Style Test (Web)",
    id: "usercssloader-test-content",
    hidden: true,
    accesskey: "W",
    oncommand: "UCL.styleTest();"
    }));
    mp.appendChild($C("menuitem", {
    label: "Styles dieser Seite auf userstyles.org finden",
    accesskey: "S",
    oncommand: "UCL.searchStyle();"
    }));
    
    menu = $C("menu", {
    label: ".uc.css",
    accesskey: "U",
    hidden: !UCL.USE_UC
    });
    menupopup.appendChild(menu);
    mp = $C("menupopup", { id: "usercssloader-ucmenupopup" });
    menu.appendChild(mp);
    mp.appendChild($C("menuitem", {
    label: "Importieren(.uc.js)",
    oncommand: "UCL.UCrebuild();"
    }));
    mp.appendChild($C("menuseparator", { id: "usercssloader-ucseparator" }));
    
    CustomizableUI.createWidget({
    id: 'usercssloader-menu-item',
    type: 'custom',
    defaultArea: CustomizableUI.AREA_NAVBAR,
    onBuild: function(aDocument) {
    let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
    toolbaritem.id = 'usercssloader-menu-item';
    toolbaritem.className = 'chromeclass-toolbar-additional';
    return toolbaritem;
    }
    });
    $('usercssloader-menu-item').appendChild(cssmenu);
    
    //let refNode = $('helpMenu');
    //refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling);
    
    $("mainKeyset").appendChild($C("key", {
    id: "usercssloader-rebuild-key",
    oncommand: "UCL.rebuild();",
    key: "R",
    modifiers: "alt",
    }));
    this.rebuild();
    this.initialized = true;
    if (UCL.USE_UC) {
    setTimeout(function() {
    UCL.UCcreateMenuitem();
    }, 1000);
    }
    window.addEventListener("unload", this, false);
    },
    uninit: function() {
    const dis = [];
    for (let x of Object.keys(this.readCSS)) {
    if (!this.readCSS[x].enabled)
    dis.push(x);
    }
    this.prefs.setCharPref("disabled_list", dis.join("|"));
    window.removeEventListener("unload", this, false);
    },
    destroy: function() {
    var i = document.getElementById("usercssloader-menu");
    if (i) i.parentNode.removeChild(i);
    var i = document.getElementById("usercssloader-rebuild-key");
    if (i) i.parentNode.removeChild(i);
    this.uninit();
    },
    handleEvent: function(event) {
    switch(event.type){
    case "unload": this.uninit(); break;
    }
    },
    rebuild: function() {
    let ext = /\.css$/i;
    let not = /\.uc\.css/i;
    let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
    while (files.hasMoreElements()) {
    let file = files.getNext().QueryInterface(Ci.nsIFile);
    if (!ext.test(file.leafName) || not.test(file.leafName)) continue;
    let CSS = this.loadCSS(file);
    CSS.flag = true;
    }
    for (let leafName of Object.keys(this.readCSS)) {
    const CSS = this.readCSS[leafName];
    if (!CSS.flag) {
    CSS.enabled = false;
    delete this.readCSS[leafName];
    }
    delete CSS.flag;
    this.rebuildMenu(leafName);
    }
    if (this.initialized) {
    if (typeof(StatusPanel) !== "undefined")
    StatusPanel._label = "Style importiert";
    else
    XULBrowserWindow.statusTextField.label = "Styles importieren";
    }
    },
    loadCSS: function(aFile) {
    var CSS = this.readCSS[aFile.leafName];
    if (!CSS) {
    CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
    if (this.disabled_list.indexOf(CSS.leafName) === -1) {
    CSS.enabled = true;
    }
    } else if (CSS.enabled) {
    CSS.enabled = true;
    }
    return CSS;
    },
    rebuildMenu: function(aLeafName) {
    var CSS = this.readCSS[aLeafName];
    var menuitem = document.getElementById("usercssloader-" + aLeafName);
    if (!CSS) {
    if (menuitem)
    menuitem.parentNode.removeChild(menuitem);
    return;
    }
    if (!menuitem) {
    menuitem = $C("menuitem", {
    label        : aLeafName,
    id            : "usercssloader-" + aLeafName,
    class        : "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET? "AUTHOR_SHEET": "USER_SHEET"),
    type        : "checkbox",
    autocheck    : "false",
    oncommand    : "UCL.toggle('"+ aLeafName +"');",
    onclick        : "UCL.itemClick(event);"
    });
    document.getElementById("usercssloader-menupopup").appendChild(menuitem);
    }
    menuitem.setAttribute("checked", CSS.enabled);
    },
    toggle: function(aLeafName) {
    var CSS = this.readCSS[aLeafName];
    if (!CSS) return;
    CSS.enabled = !CSS.enabled;
    this.rebuildMenu(aLeafName);
    },
    itemClick: function(event) {
    if (event.button == 0) return;
    event.preventDefault();
    event.stopPropagation();
    let label = event.currentTarget.getAttribute("label");
    if (event.button == 1) {
    this.toggle(label);
    }
    else if (event.button == 2) {
    closeMenus(event.target);
    this.edit(this.getFileFromLeafName(label));
    }
    },
    getFileFromLeafName: function(aLeafName) {
    let f = this.FOLDER.clone();
    f.QueryInterface(Ci.nsIFile); // use appendRelativePath
    f.appendRelativePath(aLeafName);
    return f;
    },
    styleTest: function(aWindow) {
    aWindow || (aWindow = this.getFocusedWindow());
    new CSSTester(aWindow, function(tester){
    if (tester.saved)
    UCL.rebuild();
    });
    },
    searchStyle: function() {
    let word;
    try {
    word = gBrowser.currentURI.host;
    } catch {
    word = gBrowser.currentURI.spec;
    }
    openWebLinkIn("https://userstyles.org/styles/search/" + word, "tab", {});
    },
    openFolder:function(){
    if (this.vFileManager.length != 0) {
    var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    var args=[this.FOLDER.path];
    file.initWithPath(this.vFileManager);
    process.init(file);
    // Verzeichnis mit anderem Dateimanager öffnen
    process.run(false, args, args.length);
    } else {
    // Verzeichnis mit Dateimanager des Systems öffnen
    this.FOLDER.launch();
    }
    },
    editUserCSS: function(aLeafName) {
    let file = Services.dirsvc.get("UChrm", Ci.nsIFile);
    file.appendRelativePath(aLeafName);
    this.edit(file);
    },
    edit: function(aFile) {
    var editor = Services.prefs.getCharPref("view_source.editor.path");
    if (!editor) return alert("Unter about:config den vorhandenen Schalter:\n view_source.editor.path mit dem Editorpfad ergänzen");
    try {
    var UI = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    UI.charset = window.navigator.platform.toLowerCase().indexOf("win") >= 0? "Shift_JIS": "UTF-8";
    var path = UI.ConvertFromUnicode(aFile.path);
    var app = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
    app.initWithPath(editor);
    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
    process.init(app);
    process.run(false, [path], 1);
    } catch (e) {}
    },
    create: function(aLeafName) {
    if (!aLeafName) aLeafName = prompt("Name des Styles", dateFormat(new Date(), "%Y_%m%d_%H%M%S"));
    if (aLeafName) aLeafName = aLeafName.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, "");
    if (!aLeafName || !/\S/.test(aLeafName)) return;
    if (!/\.css$/.test(aLeafName)) aLeafName += ".css";
    let file = this.getFileFromLeafName(aLeafName);
    this.edit(file);
    },
    UCrebuild: function() {
    let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    let query = "?" + new Date().getTime();
    Array.slice(document.styleSheets).forEach(function(css){
    if (!re.test(css.href)) return;
    if (css.ownerNode) {
    css.ownerNode.parentNode.removeChild(css.ownerNode);
    }
    let pi = document.createProcessingInstruction('xml-stylesheet','type="text/css" href="'+ css.href.replace(/\?.*/, '') + query +'"');
    document.insertBefore(pi, document.documentElement);
    });
    UCL.UCcreateMenuitem();
    },
    UCcreateMenuitem: function() {
    let sep = $("usercssloader-ucseparator");
    let popup = sep.parentNode;
    if (sep.nextSibling) {
    let range = document.createRange();
    range.setStartAfter(sep);
    range.setEndAfter(popup.lastChild);
    range.deleteContents();
    range.detach();
    }
    
    let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    Array.slice(document.styleSheets).forEach(function(css) {
    if (!re.test(css.href)) return;
    let fileURL = decodeURIComponent(css.href).split("?")[0];
    let aLeafName = fileURL.split("/").pop();
    let m = $C("menuitem", {
    label        : aLeafName,
    tooltiptext    : fileURL,
    id            : "usercssloader-" + aLeafName,
    type        : "checkbox",
    autocheck    : "false",
    checked        : "true",
    oncommand    : "this.setAttribute('checked', !(this.css.disabled = !this.css.disabled));",
    onclick        : "UCL.UCItemClick(event);"
    });            
    m.css = css;
    popup.appendChild(m);
    });
    },
    UCItemClick: function(event) {
    if (event.button == 0) return;
    event.preventDefault();
    event.stopPropagation();
    
    if (event.button == 1) {
    event.target.doCommand();
    }
    else if (event.button == 2) {
    closeMenus(event.target);
    let fileURL = event.currentTarget.getAttribute("tooltiptext");
    let file = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);
    this.edit(file);
    }
    },
    };
    
    function CSSEntry(aFile) {
    this.path = aFile.path;
    this.leafName = aFile.leafName;
    this.lastModifiedTime = 1;
    this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ?
    Ci.nsIStyleSheetService.AGENT_SHEET:
    Ci.nsIStyleSheetService.USER_SHEET;
    }
    CSSEntry.prototype = {
    sss: Components.classes["@mozilla.org/content/style-sheet-service;1"]
    .getService(Components.interfaces.nsIStyleSheetService),
    _enabled: false,
    get enabled() {
    return this._enabled;
    },
    set enabled(isEnable) {
    var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile)
    aFile.initWithPath(this.path);
    
    var isExists = aFile.exists(); // Wenn die Datei existiert true
    var lastModifiedTime = isExists ? aFile.lastModifiedTime : 0;
    var isForced = this.lastModifiedTime != lastModifiedTime; // Wenn es eine Änderung in der Datei gibt true
    
    var fileURL = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile);
    var uri = Services.io.newURI(fileURL, null, null);
    
    if (this.sss.sheetRegistered(uri, this.SHEET)) {
    // Wenn diese Datei bereits gelesen wurde
    if (!isEnable || !isExists) {
    this.sss.unregisterSheet(uri, this.SHEET);
    }
    else if (isForced) {
    // Nach Stornierung erneut einlesen
    this.sss.unregisterSheet(uri, this.SHEET);
    this.sss.loadAndRegisterSheet(uri, this.SHEET);
    }
    } else {
    // Datei wurde nicht gelesen
    if (isEnable && isExists) {
    this.sss.loadAndRegisterSheet(uri, this.SHEET);
    }
    }
    if (this.lastModifiedTime !== 1 && isEnable && isForced) {
    log(this.leafName + " wurde aktualisiert");
    }
    this.lastModifiedTime = lastModifiedTime;
    return this._enabled = isEnable;
    },
    };
    
    function CSSTester(aWindow, aCallback) {
    this.win = aWindow || window;
    this.doc = this.win.document;
    this.callback = aCallback;
    this.init();
    }
    CSSTester.prototype = {
    sss: Components.classes["@mozilla.org/content/style-sheet-service;1"]
    .getService(Components.interfaces.nsIStyleSheetService),
    preview_code: "",
    saved: false,
    init: function() {
    this.dialog = openDialog(
    "data:text/html;charset=utf8,"+encodeURIComponent('<!DOCTYPE HTML><html lang="de"><head><title>CSSTester</title></head><body></body></html>'),
    "",
    "width=550,height=400,dialog=no");
    this.dialog.addEventListener("load", this, false);
    },
    destroy: function() {
    this.preview_end();
    this.dialog.removeEventListener("unload", this, false);
    this.previewButton.removeEventListener("click", this, false);
    this.saveButton.removeEventListener("click", this, false);
    this.closeButton.removeEventListener("click", this, false);
    },
    handleEvent: function(event) {
    switch(event.type) {
    case "click":
    if (event.button != 0) return;
    if (this.previewButton == event.currentTarget) {
    this.preview();
    }
    else if (this.saveButton == event.currentTarget) {
    this.save();
    }
    else if (this.closeButton == event.currentTarget) {
    this.dialog.close();
    }
    break;
    case "load":
    var doc = this.dialog.document;
    doc.body.innerHTML = '\
    <style type="text/css">\
    :not(input):not(select) { padding: 0px; margin: 0px; }\
    table { border-spacing: 0px; }\
    body, html, #main, #textarea { width: 100%; height: 100%; }\
    #textarea { font-family: monospace; }\
    </style>\
    <table id="main">\
    <tr height="100%">\
    <td colspan="4"><textarea id="textarea"></textarea></td>\
    </tr>\
    <tr height="40">\
    <td><input type="button" value="Vorschau" id="Vorschau"/></td>\
    <td><input type="button" value="Speichern" id="Speichern"/></td>\
    <td width="80%"><span class="log"></span></td>\
    <td><input type="button" value="Schließen" id="Schliessen"/></td>\
    </tr>\
    </table>\
    ';
    this.textbox = doc.querySelector("textarea");
    this.previewButton = doc.querySelector('input[value="Vorschau"]');
    this.saveButton = doc.querySelector('input[value="Speichern"]');
    this.closeButton = doc.querySelector('input[value="Schließen"]');
    this.logField = doc.querySelector('.log');
    
    var code = "@namespace url(" + this.doc.documentElement.namespaceURI + ");\n";
    code += this.win.location.protocol.indexOf("http") === 0?
    "@-moz-document domain(" + this.win.location.host + ") {\n\n\n\n}":
    "@-moz-document url(" + this.win.location.href + ") {\n\n\n\n}";
    this.textbox.value = code;
    this.dialog.addEventListener("unload", this, false);
    this.previewButton.addEventListener("click", this, false);
    this.saveButton.addEventListener("click", this, false);
    this.closeButton.addEventListener("click", this, false);
    
    this.textbox.focus();
    let p = this.textbox.value.length - 3;
    this.textbox.setSelectionRange(p, p);
    
    break;
    case "unload":
    this.destroy();
    this.callback(this);
    break;
    }
    },
    preview: function() {
    var code = this.textbox.value;
    if (!code || !/\:/.test(code))
    return;
    code = "data:text/css;charset=utf-8," + encodeURIComponent(this.textbox.value);
    if (code == this.preview_code)
    return;
    this.preview_end();
    var uri = Services.io.newURI(code, null, null);
    this.sss.loadAndRegisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    this.preview_code = code;
    this.log("Preview");
    },
    preview_end: function() {
    if (this.preview_code) {
    let uri = Services.io.newURI(this.preview_code, null, null);
    this.sss.unregisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    this.preview_code = "";
    }
    },
    save: function() {
    var data = this.textbox.value;
    if (!data) return;
    
    var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    fp.init(window, "", Ci.nsIFilePicker.modeSave);
    fp.appendFilter("CSS Files","*.css");
    fp.defaultExtension = "css";
    if (window.UCL)
    fp.displayDirectory = UCL.FOLDER;
    var res = fp.show();
    if (res != fp.returnOK && res != fp.returnReplace) return;
    
    var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    suConverter.charset = "UTF-8";
    data = suConverter.ConvertFromUnicode(data);
    var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
    foStream.init(fp.file, 0x02 | 0x08 | 0x20, 0664, 0);
    foStream.write(data, data.length);
    foStream.close();
    this.saved = true;
    },
    log: function() {
    this.logField.textContent = dateFormat(new Date(), "%H:%M:%S") + ": " + $A(arguments);
    }
    };
    
    UCL.init();
    
    function $(id) { return document.getElementById(id); }
    function $A(arr) { return Array.slice(arr); }
    function $C(name, attr) {
    var el = document.createXULElement(name);
    if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) });
    return el;
    }
    function dateFormat(date, format) {
    format = format.replace("%Y", ("000" + date.getFullYear()).substr(-4));
    format = format.replace("%m", ("0" + (date.getMonth()+1)).substr(-2));
    format = format.replace("%d", ("0" + date.getDay()).substr(-2));
    format = format.replace("%H", ("0" + date.getHours()).substr(-2));
    format = format.replace("%M", ("0" + date.getMinutes()).substr(-2));
    format = format.replace("%S", ("0" + date.getSeconds()).substr(-2));
    return format;
    }
    
    function log() { Application.console.log(Array.slice(arguments)); }
    
    })();
    Alles anzeigen

    Zwar werden CSS-Dateien geladen allerdings habe ich keinen Button mehr.. dazu nutze ich den CSS Code im neuen Post, da hier nur 20000 Zeichen erlaubt sind

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

    Einmal editiert, zuletzt von Boersenfeger (22. Oktober 2023 um 14:58)

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 15. Oktober 2023 um 17:33
    • #2

    UserStylesLoader.zip

    Leider nur als ZIP, da der Code zu umfangreich ist...

    Liegts am Script oder Code?

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • Bastler
    Gast
    • 15. Oktober 2023 um 17:42
    • #3
    Zitat von Boersenfeger

    allerdings habe ich keinen Button mehr.

    Hallo,

    die Ziele müssen bei allen Scripten anders angesprochen werden. Nur so eine Idee (ohne Gewähr)

    Ich gehe davon aus, dass die Anpassungen für Scripte konform zum 115.x gemacht wurden.

    Zeile 148 | defaultArea: CustomizableUI.AREA_NAVBAR,

    versuche

    CustomizableUI.unifiedToolbarContent,

    oder auch nur unifiedToolbarContent,

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 15. Oktober 2023 um 17:59
    • #4
    Zitat von Bastler

    Ich gehe davon aus, dass die Anpassungen für Scripte konform zum 115.x gemacht wurden.

    Zeile 148 | defaultArea: CustomizableUI.AREA_NAVBAR,

    versuche

    CustomizableUI.unifiedToolbarContent,

    oder auch nur unifiedToolbarContent,

    Vielen Dank !

    Die Anpassungen für Scripte sind analog zum aktuellen Firefox Nightly erledigt.

    Deine Vorschläge bescheren mir leider keinen Button...

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • Bastler
    Gast
    • 15. Oktober 2023 um 18:04
    • #5
    Zitat von Boersenfeger

    Deine Vorschläge bescheren mir leider keinen Button...

    In der Gegend ist aber zu arbeiten. Dann warte auf einen Scripte Papst.

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 15. Oktober 2023 um 18:11
    • #6

    Jo, ich hoffe drauf.... :thumbsup:

    danke für den Versuch!

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • dharkness21
    Senior-Mitglied
    Reaktionen
    452
    Beiträge
    1.839
    Mitglied seit
    29. Jun. 2005
    Hilfreiche Antworten
    53
    • 15. Oktober 2023 um 19:04
    • #7
    Zitat von Boersenfeger

    Wie angekündigt stelle ich hier einige Scripte zur Diskussion, die im TB 115 nicht mehr funktionieren und bitte um freundliche Unterstützung..

    Ich stehe gerade auf dem Schlau, Tb-Ordner mit Anpassungen versehen, Profil mit chrome Ordner und der userChrome.js versehen, ein Profil startet vorhandene Scripte das andere neu eingerichtete nach Fehlerbehebungsmodus nicht, was ist da los?

    Im funktionierenden Profil ist der startupCache Ordner vorhanden, im nicht funktionierendem Profil nicht, wieso?

    P.S.:

    Das Profil habe ich extra für diesen Test erstellt. :(

    und wech

    Dharkness

  • Bastler
    Gast
    • 15. Oktober 2023 um 19:11
    • #8
    Zitat von dharkness21

    das andere neu eingerichtete

    Hat auch die userChrome.js im Bauch? (Nur so geunkt)

  • dharkness21
    Senior-Mitglied
    Reaktionen
    452
    Beiträge
    1.839
    Mitglied seit
    29. Jun. 2005
    Hilfreiche Antworten
    53
    • 15. Oktober 2023 um 19:14
    • #9
    Zitat von Bastler

    Hat auch die userChrome.js im Bauch? (Nur so geunkt)

    Du meinst im Profil im Ordner chrome? Wenn ja, dann ja.

    und wech

    Dharkness

  • Bastler
    Gast
    • 15. Oktober 2023 um 19:21
    • #10
    Zitat von dharkness21

    Wenn ja, dann ja.

    OK, das war in der Abfolge der Beschreibung nicht so glasklar, vor Allem wenn es klemmt.

  • dharkness21
    Senior-Mitglied
    Reaktionen
    452
    Beiträge
    1.839
    Mitglied seit
    29. Jun. 2005
    Hilfreiche Antworten
    53
    • 15. Oktober 2023 um 19:37
    • #11

    Bei gleichem Programmordner.

    Funktioniert:


    Funktioniert nicht:

    und wech

    Dharkness

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 16. Oktober 2023 um 16:20
    • #12

    Äh, was hat jetzt das mit meinem Problem zu tun... oder seid ihr hier nur falsch abgebogen? :)

    Habe nun das Restart und das CSS-Loader-Script richtig eingebunden, die Buttons erscheinen und es funktioniert.... :thumbsup:


    Hier funktioniert jetzt nur noch ein Script nicht. Wenn dort nochmal jemand nachschauen könnte... ggf. lässt sichs aber für die 115er Version nicht mehr aktivieren, weil die Grundlagen andere sind:

    JavaScript
    /* Addons-UpDate-Check-Button */
    
    (function() {
        
      if (window.__SSi != 'window0')
        return;
    
      CustomizableUI.createWidget({
        id: 'addons-update-button',
        defaultArea: CustomizableUI.AREA_NAVBAR,
        label: 'Add-ons Update',
        tooltiptext: '',
        onCommand: onCommand,
        onCreated: function(button) {
            button.style.listStyleImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)';}
      });
      
      function onCommand(event) {
          
        let frameScript = function() {
          addEventListener('pageshow', function onPageshow(event) {
            let document = event.target;
            if (document.URL != 'about:addons')
              return;
            removeEventListener('pageshow', onPageshow);
    
            content.setTimeout(function() {
              document.querySelector('addon-page-options panel-item[action="check-for-updates"]').click();
              let categories = document.getElementById('categories');
              let item = categories.querySelector('button[viewid="addons://updates/available"]');
              item.click();
    
              categories.addEventListener('mousedown', function onMousedown(event) {
                if (event.target != item && event.target.parentNode != item) {
                  item.hidden = true;
                  categories.removeEventListener('mousedown', onMousedown);
                };
              });
            }, 0);
          });
        };
    
        let frameScriptURI = 'data:,(' + frameScript.toString() + ')()';
        let window = event.target.ownerGlobal;
        window.openTrustedLinkIn('about:addons', 'tab');
        window.gBrowser.selectedBrowser.messageManager.loadFrameScript(frameScriptURI, true);
      };
    })();
    Alles anzeigen

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • dharkness21
    Senior-Mitglied
    Reaktionen
    452
    Beiträge
    1.839
    Mitglied seit
    29. Jun. 2005
    Hilfreiche Antworten
    53
    • 16. Oktober 2023 um 19:22
    • #13
    Zitat von Boersenfeger

    Äh, was hat jetzt das mit meinem Problem zu tun... oder seid ihr hier nur falsch abgebogen? :)

    Nein, ich habe versucht das hier angefragte Script in einem neuen Profil zu testen, bei Profile werden über das gleiche Programmverzeichnis gestartet, aber nur eines funktioniert. Da das erste funktioniert, ist gegeben, das die Anpassungen für das funktionieren für Scripte korrekt ist, ich frage mich jetzt nur warum das 2te Profil nicht funktioniert.

    und wech

    Dharkness

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 17. Oktober 2023 um 13:56
    • #14

    UserCSS Loader ist hier ja nun korrekt und funktioniert auch... gehts bei dir denn im 1. Profil?

    Was wäre dann mit dem Script

    Code
    /* Addons-UpDate-Check-Button */

    :)

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 22. Oktober 2023 um 14:23
    • #15

    Wie erwähnt funktioniert das nachfolgende Script mit TB 115.4.0b2 nicht:

    Liegt es am Script oder funktioniert dies nicht mehr in TB Supernova?

    Es wäre schön, wenn jemand dazu etwas sagen könnte! :)

    JavaScript
    /* Addons-UpDate-Check-Button */
    
    (function() {
        
      if (window.__SSi != 'window0')
        return;
    
      CustomizableUI.createWidget({
        id: 'addons-update-button',
        defaultArea: CustomizableUI.AREA_NAVBAR,
        label: 'Add-ons Update',
        tooltiptext: '',
        onCommand: onCommand,
        onCreated: function(button) {
        button.style.listStyleImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB9klEQVR42o2TP2gTURzHvwcRXqDDCzi8gww+cfACBRsoJAWXji0KzZFBxUELDoouOmnG6JQiWOogVAcpHUpvKDRLQbekoKRDJXHyLYHLIOQNhXtgBt+7u+SSpkq+w93xu9/vw++vhVj0MiUOyzicEo5LuFh/ACGV6PT6HflbKmOyzINnGdt5kPOKnBYxg5pCNu99apdEt9cLAYdPi4cr8+kVDGYJ10oB3mlQdzebqxZnlLZf5vsEwYzRkRTSyL1pZSznCuPtZ/zXlMcNV9e2FH2LBvCjDrAFoNsYueTeiashoPV4EkDWNrSzA/ltP2rwohumjZ9foI5qI7/8+yHgkT0CkGvLwK0q5KYLovzIWK6BXNf2754GVBPABz8GPEwAithQKQJ6JmJiBmqOQekGEyUTqAF8HALuJwDML4OY2gcK6us2EPQj+811Xf+J7kcrAXwOAZS37oyVcLsCFO5CHXvAQSWyLZaist6ugvRFAtg1gOw0QJrGFXTQmYyMcxRytwJyWp8YVAIoj/eAhoHh24nH2GmADHT95yad39MApm+gUbZ9OwVq1mNyWeKsppaEwB9ALu35drjKzwvs1YuFdHXa8V9bCNROgsrGce91CDCX6GbJkxJPr9sE9v+CfQXfE8H2fldtmYu0xn8a0IUZn0tgeMpGfwErbLqeHktDngAAAABJRU5ErkJggg==)';}
        }); 
      
      function onCommand(event) {
          
        let frameScript = function() {
          addEventListener('pageshow', function onPageshow(event) {
            let document = event.target;
            if (document.URL != 'about:addons')
              return;
            removeEventListener('pageshow', onPageshow);
    
            content.setTimeout(function() {
              document.querySelector('addon-page-options panel-item[action="check-for-updates"]').click();
              let categories = document.getElementById('categories');
              let item = categories.querySelector('button[viewid="addons://updates/available"]');
              item.click();
    
              categories.addEventListener('mousedown', function onMousedown(event) {
                if (event.target != item && event.target.parentNode != item) {
                  item.hidden = true;
                  categories.removeEventListener('mousedown', onMousedown);
                };
              });
            }, 0);
          });
        };
    
        let frameScriptURI = 'data:,(' + frameScript.toString() + ')()';
        let window = event.target.ownerGlobal;
        window.openTrustedLinkIn('about:addons', 'tab');
        window.gBrowser.selectedBrowser.messageManager.loadFrameScript(frameScriptURI, true);
      };
    })();
    Alles anzeigen

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • edvoldi
    Moderator
    Reaktionen
    266
    Beiträge
    7.540
    Mitglied seit
    23. Dez. 2005
    Hilfreiche Antworten
    32
    • 22. Oktober 2023 um 14:26
    • #16

    Hallo Boersenfeger,

    Zitat von Boersenfeger

    Liegt es am Script oder funktioniert dies nicht mehr in TB Supernova?

    das hat bei mir auch schon in der 102 nicht funktioniert.

    Gruß

    EDV-Oldie

    WIN11 Home Version 24H2 (Build 26100.3915)

    Thunderbird 128.10.0esr (64-Bit)
    Thunderbird - Beta 139.0b2 (64-Bit)
    Thunderbird - Daily 140.0a1 (64-Bit)

    Firefox 138.0 (64-Bit)

    Thunderbird-Kalender: FAQ / Erweiterungen für den Kalender / Meine Erweiterungen

    Keine Forenhilfe per Konversation!

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 22. Oktober 2023 um 14:43
    • #17

    OK, vielen Dank, hast du eine Lösung gefunden oder muss man sich vom Script verabschieden?

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • edvoldi
    Moderator
    Reaktionen
    266
    Beiträge
    7.540
    Mitglied seit
    23. Dez. 2005
    Hilfreiche Antworten
    32
    • 22. Oktober 2023 um 14:47
    • #18
    Zitat von Boersenfeger

    OK, vielen Dank, hast du eine Lösung gefunden oder muss man sich vom Script verabschieden?

    Leider habe ich auch keine Lösung und hier im Forum ist, glaube ich, keiner der das kann.

    Gruß

    EDV-Oldie

    WIN11 Home Version 24H2 (Build 26100.3915)

    Thunderbird 128.10.0esr (64-Bit)
    Thunderbird - Beta 139.0b2 (64-Bit)
    Thunderbird - Daily 140.0a1 (64-Bit)

    Firefox 138.0 (64-Bit)

    Thunderbird-Kalender: FAQ / Erweiterungen für den Kalender / Meine Erweiterungen

    Keine Forenhilfe per Konversation!

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 22. Oktober 2023 um 14:56
    • #19

    Gut, dann muss ich das so hinnehmen. :(

    Nun noch ein letztes Script, das in 102 noch funktionierte, mit der neuen Variante aber nicht mehr.

    JavaScript
    // ==UserScript==
    // @name           addBuildIdToAboutDialogueBox.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description
    // @include        chrome://messenger/content/aboutDialog.xul
    // @compatibility  Thunderbird 102.*
    // @author         Alice0775
    // @version        2019/05/29 22.00 Anpassung von milupo - Reparatur der mehrzeiligen Darstellung
    // @version        2013/02/11 23:00 Bug 755724
    // @version        2008/11/22 12:00
    // @Note           Unter Thunderbird Hilfe - Über Thunderbird Textfeld die BuilsID hinzufügen 
    // @Note           und automatisches Kopieren in die Zwischenablage der BuilsID.
    // ==/UserScript==
    
    var addBuildid = {
      buildid: function (){
        return navigator.buildID;
      },
    
      addBuildid: function () {
        var ua = this.convUA() + " ID:" + this.buildid();
    
        var userAgentField = document.getElementById("userAgent");
        if (!userAgentField) {
          userAgentField = document.getElementById("rightBox");
          var label = document.createElementNS("http://www.w3.org/1999/xhtml", 'textarea');
          userAgentField = userAgentField.appendChild(label);
          userAgentField.setAttribute("id", "agent");
          userAgentField.setAttribute("value", navigator.userAgent);
          userAgentField.setAttribute("multiline", true);
          userAgentField.setAttribute("rows", "5");
        }
        userAgentField.value = this.getBuildSource() + "\n" + ua;
        userAgentField.setAttribute("value", this.getBuildSource() + "\n" + ua);
        window.resizeBy(0, 100);
      },
    
      convUA: function(){
        var pref = Components.classes['@mozilla.org/preferences-service;1']
                             .getService(Components.interfaces.nsIPrefBranch);
        const kUA = "general.useragent.extra.thunderbird";
        const kUA2 = "general.useragent.override";
        var oldId = "";
        if (pref.prefHasUserValue(kUA)){
          oldId = pref.getCharPref(kUA);
          pref.clearUserPref(kUA);
        }
        var oldId2 = "";
        if (pref.prefHasUserValue(kUA2)){
          oldId2 = pref.getCharPref(kUA2);
          pref.clearUserPref(kUA2);
        }
        ua = navigator.userAgent;
        if (!!oldId)
          pref.setCharPref(kUA, oldId);
        if (!!oldId2)
          pref.setCharPref(kUA2, oldId2);
        return ua;
      },
    
      copyUA: function (){
        var userAgentField = document.getElementById("userAgent");
        if (!userAgentField)
          userAgentField = document.getElementById("agent");
        Components.classes["@mozilla.org/widget/clipboardhelper;1"]
          .getService(Components.interfaces.nsIClipboardHelper).copyString(userAgentField.value);
      },
    
      getBuildSource: function (){
        const Cc = Components.classes;
        const Ci = Components.interfaces;
        const ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
        const fph = ios.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler);
        const ds = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
        var file = ds.get("CurWorkD", Ci.nsIFile);
        var file = ds.get("CurProcD", Ci.nsIFile);
        if (/browser$/.test(file.path)) {
            var path = file.path.replace(/browser$/,"");
                file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                file.initWithPath(path);
        }
        file.append("application.ini");
        var text = this.readFile(file);
        try {
          var SourceRepository = text.match(/SourceRepository=(.*)/)[1];
          var SourceStamp = text.match(/SourceStamp=(.*)/)[1];
          //alert(SourceRepository + "/rev/" + SourceStamp);
          return SourceRepository + "/rev/" + SourceStamp;
        } catch (ex) {
          return ""
        }
      },
    
      readFile: function (aFile){
            var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].
                                    createInstance(Components.interfaces.nsIFileInputStream);
            stream.init(aFile, 0x01, 0, 0);
            var cvstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
                                      createInstance(Components.interfaces.nsIConverterInputStream);
            cvstream.init(stream, "UTF-8", 1024,
                          Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
            var content = "", data = {};
            while (cvstream.readString(4096, data)) {
              content += data.value;
            }
            cvstream.close();
            return content.replace(/\r\n?/g, "\n");
          }
    }
    
    addBuildid.addBuildid();
    addBuildid.copyUA();
    setTimeout(function(){window.resizeBy(0, 0);},0);
    Alles anzeigen

    Windows 11 Pro 64bit

    Thunderbird 128.10.0 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • Boersenfeger 22. Oktober 2023 um 14:57

    Hat den Titel des Themas von „Verschiedene Scripte funktionier nicht mit TB 115*“ zu „Verschiedene Scripte funktionieren nicht mit TB 115*“ geändert.
  • edvoldi
    Moderator
    Reaktionen
    266
    Beiträge
    7.540
    Mitglied seit
    23. Dez. 2005
    Hilfreiche Antworten
    32
    • 22. Oktober 2023 um 14:59
    • #20
    Zitat von Boersenfeger

    chrome://messenger/content/aboutDialog.xul

    was mir auf den ersten Blick aufgefallen ist, es gibt doch kein xul mehr oder?

    WIN11 Home Version 24H2 (Build 26100.3915)

    Thunderbird 128.10.0esr (64-Bit)
    Thunderbird - Beta 139.0b2 (64-Bit)
    Thunderbird - Daily 140.0a1 (64-Bit)

    Firefox 138.0 (64-Bit)

    Thunderbird-Kalender: FAQ / Erweiterungen für den Kalender / Meine Erweiterungen

    Keine Forenhilfe per Konversation!

Aktuelle Programmversion

  • Thunderbird 138.0 veröffentlicht

    Thunder 30. April 2025 um 00:04

Aktuelle ESR-Version

  • Thunderbird 128.10.0 ESR veröffentlicht

    Thunder 29. April 2025 um 23:24

Keine Werbung

Hier wird auf Werbeanzeigen verzichtet. Vielleicht geben Sie dem Website-Betreiber (Alexander Ihrig - aka "Thunder") stattdessen etwas aus, um diese Seiten auf Dauer finanzieren zu können. Vielen Dank!

Vielen Dank für die Unterstützung!

Kaffee ausgeben für:

Per Paypal unterstützen*

*Weiterleitung zu PayPal.Me

Ähnliche Themen

  • 2 Thunderbird Versionen auf einem PC installieren

    • Neckar
    • 10. Oktober 2023 um 12:23
    • Allgemeines Arbeiten / Konten einrichten / Installation & Update
  • Update rückgängig machen gescheitert und nun?

    • gerhardm
    • 12. Juli 2023 um 16:31
    • Migration / Import / Backups
  • Diskussionsthread für Benutzerskripts

    • milupo
    • 2. November 2021 um 15:35
    • Manuelle Anpassungen per CSS oder Script
  • Schnellfilter Nachrichteninhalt wird nicht zuverlässig gefunden

    • Helmi
    • 25. Juli 2023 um 10:24
    • Allgemeines Arbeiten / Konten einrichten / Installation & Update
Thunderbird Mail DE
  1. Impressum & Kontakt
  2. Datenschutzerklärung
    1. Einsatz von Cookies
  3. Nutzungsbedingungen
  4. Spendenaufruf für Thunderbird
Hilfe zu dieser Webseite
  • Übersicht der Hilfe zur Webseite
  • Die Suchfunktion benutzen
  • Foren-Benutzerkonto - Erstellen (Neu registrieren)
  • Foren-Thema erstellen und bearbeiten
  • Passwort vergessen - neues Passwort festlegen
Copyright © 2003-2025 Thunderbird Mail DE

Sie befinden sich NICHT auf einer offiziellen Seite der Mozilla Foundation. Mozilla®, mozilla.org®, Firefox®, Thunderbird™, Bugzilla™, Sunbird®, XUL™ und das Thunderbird-Logo sind (neben anderen) eingetragene Markenzeichen der Mozilla Foundation.

Community-Software: WoltLab Suite™