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
  • Deutsch
  • Anmelden
  • Registrieren
  • 
  • Suche
Dieses Thema
  1. Thunderbird Mail DE
  2. Forum
  3. Hilfe zu Add-ons und manuellen Anpassungen
  4. Manuelle Anpassungen per CSS oder Script

Diskussionsthread für Benutzerskripts

    • 91.*
    • Windows
  • milupo
  • 2. November 2021 um 15:35
  • Geschlossen
  • Unerledigt
  • 1
  • 8
  • 9
  • 10
  • 25
  • milupo
    Gast
    • 23. Dezember 2021 um 00:14
    • #161
    Zitat von edvoldi

    einfach speichern als z.B. Versions_Nr.css oder direkt in die userContent.css speichern.

    Mapenzi Wenn du als Datei speicherst, brauchst du diese bloß mit einem @import-Befehl in der userContent.css (oder in anderen Fällen in der userChrome.css) registrieren. Da du einen Ordner CSSWeb hast, sieht das dann so in der userContent.css aus:

    CSS
    @import "CSSWeb/Dateiname.css";

    Aris hat manchmal eigene @import-Befehle bei zusammengehörigen Dateien.

  • milupo
    Gast
    • 23. Dezember 2021 um 00:28
    • #162

    Mapenzi Hier noch eine Übersicht der in TB enthaltenen about:-Seiten:

  • schlingo
    Senior-Mitglied
    Reaktionen
    761
    Beiträge
    7.008
    Mitglied seit
    20. Jul. 2009
    Hilfreiche Antworten
    49
    • 23. Dezember 2021 um 15:58
    • #163
    Zitat von milupo

    Hier noch eine Übersicht der in TB enthaltenen about:-Seiten

    Hallo :)

    wie rufst Du die im TB auf? Ich kenne das nur vom Fx (about:about).

    Gruß Ingo

    Threema - Sicherer und privater Messenger

    Meine Threema-ID

    Warum Threema?

  • milupo
    Gast
    • 23. Dezember 2021 um 16:12
    • #164
    Zitat von schlingo

    wie rufst Du die im TB auf? Ich kenne das nur vom Fx (about:about).

    Hallo Ingo,

    über das Skript extras_config_menu_tb.uc.js - und dort eben über about: --> about:about.

  • Mapenzi
    Senior-Mitglied
    Reaktionen
    1.029
    Beiträge
    11.839
    Mitglied seit
    26. Mai. 2012
    Hilfreiche Antworten
    117
    • 23. Dezember 2021 um 16:20
    • #165
    Zitat von milupo

    Da du einen Ordner CSSWeb hast, sieht das dann so in der userContent.css aus:

    Nochmals herzlichen Dank für deine zusätzlichen Erläuterungen und frohe Festtage :)

  • milupo
    Gast
    • 23. Dezember 2021 um 16:27
    • #166
    Zitat von Mapenzi

    Nochmals herzlichen Dank für deine zusätzlichen Erläuterungen und frohe Festtage

    Auch ich wünsche dir frohe Weihnachtsfeiertage.

  • milupo
    Gast
    • 23. Dezember 2021 um 20:10
    • #167

    Dann mache ich mal hier zur Verschiebbarkeit der Symbole weiter, die im Firefox-Forum aufkam. Meine Skriptversionen sind folgende:

    JavaScript
    // aboutconfig-button.uc.js
    
    "use strict";
    (function() {
    
        if (location != 'chrome://messenger/content/messenger.xhtml') return;
    
        var toolbarbutton = document.createXULElement('toolbarbutton');
        var props = {
            id: 'aboutconfig-toolbar',
            label: 'Einstellungen',
            tooltiptext: 'Aboutconfig öffnen',
            style: 'list-style-image: url("file:///C:/Users/Lenovo M58/AppData/Roaming/Thunderbird/Profiles/g65rng3q.default-release-9/chrome/icons/about_config.png")',
            class: 'toolbarbutton-1',
            onclick:
                    'if (event.button == 0) { \
                            var tabmail = document.getElementById("tabmail"); \
                                tabmail.openTab("contentTab", { url: "about:config" });\
                    };'
        };
        for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    
        var toolbox = document.getElementById("mail-toolbox");
        toolbox.palette.appendChild(toolbarbutton);
    
        var toolbar = document.getElementById("tabbar-toolbar");
        toolbar.insertItem("aboutconfig-toolbar", toolbar.lastChild); 
    
    })();
    Alles anzeigen

    und

    JavaScript
    //    Button für Browserwerkzeuge
    //    browsertoolbox.uc.js von Endor von hier:
    //    https://www.camp-firefox.de/forum/thema/129954-symbole-zu-kontextmen%C3%BCs-mit-javascript-und-css-hinzuf%C3%BCgen/?postID=1138524#post1138524
    //    2021-11-02 Von milupo für Thunderbird angepasst
    //  200214:    Einbau
    //    200215: berechneter Path mit "werkzeuge.png"
    
    (function() {
    
        if (location != 'chrome://messenger/content/messenger.xhtml')
            return;
    
        var toolbarbutton = document.createXULElement('toolbarbutton');        
                    var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                    var buttonicon = "werkzeugkasten.png"
                    var props = {
                        id: 'browser-toolbox-button',
                        class: 'toolbarbutton-1',
                        label: 'Browser-Werkzeuge',
                        tooltiptext: 'Browser-Werkzeuge',
                        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
                        oncommand: '(' + onCommand.toString() + ')()'
                    };
                   for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    
        var toolbox = document.getElementById("mail-toolbox");
        toolbox.palette.appendChild(toolbarbutton);    
    
        var toolbar = document.getElementById("tabbar-toolbar");
        toolbar.insertItem("browser-toolbox-button", toolbar.lastChild);
                   
        function onCommand() {
            var document = event.target.ownerDocument;
            if (!document.getElementById('devtoolsToolbox')) {
                let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
                require("devtools/client/framework/devtools-browser");
            };
            document.getElementById('devtoolsToolbox').click();
        };
    
    })();
    Alles anzeigen

    Das Entscheidende sind wohl die Zeilen 27 bzw. 30: Dort steht toolbar.lastChild, was wohl bedeutet, dass das jeweilige Symbol hinter dem letzten bereits vorhandenen eingefügt wird. Jedenfalls kann ich das jeweilige Symbol an eine andere Stelle in der Symbolleiste verschieben.

  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 23. Dezember 2021 um 20:19
    • #168
    Zitat von milupo
    ....

    Das Entscheidende sind wohl die Zeilen 27 bzw. 30: Dort steht toolbar.lastChild, was wohl bedeutet, dass das jeweilige Symbol hinter dem letzten bereits vorhandenen eingefügt wird. Jedenfalls kann ich das jeweilige Symbol an eine andere Stelle in der Symbolleiste verschieben.

    Und bleiben die Symbole an der anderen Stelle nach einem Neustart? Eigentlich müssten sie dann doch wieder an die letzte Stelle positioniert werden.

  • milupo
    Gast
    • 23. Dezember 2021 um 20:29
    • #169

    Ach tatsächlich, sie springen wieder zurück. Mist. Sind aber auch nicht am Ende.

  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 23. Dezember 2021 um 20:31
    • #170
    Zitat von milupo

    Ach tatsächlich, sie springen wieder zurück. Mist. Sind aber auch nicht am Ende.

    Schade, ich hatte schon gehofft, du hättest einen Trick gefunden.

  • milupo
    Gast
    • 23. Dezember 2021 um 20:35
    • #171

    Na ja, immerhin lassen sie sich verschieben, wenn auch nicht dauerhaft. Ich könnte mir vorstellen, dass das mit einer kleinen Code-Änderung machbar ist. Nur mit welcher?

  • milupo
    Gast
    • 23. Dezember 2021 um 20:42
    • #172

    Möglicherweise liegt es doch an CustomizableUI.Create Widget und CustomizableUI.AREA_NAVBAR, die bei Firefox diese Anpassmöglichkeiten definieren - customizable bedeutet ja „anpassbar“.

  • bananovic
    Mitglied
    Reaktionen
    3
    Beiträge
    96
    Mitglied seit
    23. Jul. 2014
    • 24. Dezember 2021 um 11:52
    • #173

    Schön, daß derThread im Thunderbird Forum weitergeht. Das habe ich erst jetzt bemerkt. Ich möchte mal den Code von meinen 3 TB-Scripts, um die es geht, bekanntgeben.

    BrowserToolbox.uc.js

    CSS
    // Button für Browserwerkzeuge
    // browsertoolbox.uc.js von Endor von hier:
    // https://www.camp-firefox.de/forum/thema/129954-symbole-zu-kontextmen%C3%BCs-mit-javascript-und-css-hinzuf%C3%BCgen/?postID=1138524#post1138524
    // 2021-11-03 Von milupo & edvoldie für Thunderbird angepasst
    // 200214: Einbau
    
    
    (function() {
    if (location != 'chrome://messenger/content/messenger.xhtml')
    return;
    var toolbarbutton = document.createXULElement('toolbarbutton');
    var props = {
    id: 'browser-toolbox-button',
    class: 'toolbarbutton-1',
    label: 'Browser-Werkzeuge',
    tooltiptext: 'Browser-Werkzeuge',
    
    style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA3ElEQVQ4jZXSsRHDIBQDUI3hNVjDa2illFrBa7ikzAouf+lSKTAEO5yTcPcLDv+HAEOSfy2MhiTbu7fteVvzPN8D67p6mqZWkrxtT0fEf4C9294b8HeCK0DCJH4H+ksj0UAS34FleTglOCV4WR4HIEtogARLHXZ9BRKOiNbUAxI+04yA2nAF+rUhkFJpqEXCOfOUplSXogfIcv76cc5sO+fMjzRDoN58Oa+OV1BLYu8GBkBEnJpJOKHMc6YTzhcJHABJvwunY3RRG1CR4T9RwAL087bbMb8FvoHX8QLPnPfVLcoFYwAAAABJRU5ErkJggg==)',
    
    oncommand: '(' + onCommand.toString() + ')()'
    };
    for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    var toolbox = document.getElementById("mail-toolbox");
    toolbox.palette.appendChild(toolbarbutton);
    var toolbar = document.getElementById("tabbar-toolbar");
    toolbar.insertItem("browser-toolbox-button", document.getElementById('button-addons'));
    
    
    function onCommand() {
    var document = event.target.ownerDocument;
    if (!document.getElementById('devtoolsToolbox')) {
    let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
    require("devtools/client/framework/devtools-browser");
    };
    document.getElementById('devtoolsToolbox').click();
    };
    
    })();
    Alles anzeigen

    aboutconfig-button.uc.js

    CSS
    // aboutconfig-button.uc.js
    
    "use strict";
    (function() {
    
        if (location != 'chrome://messenger/content/messenger.xhtml') return;
    
        var toolbarbutton = document.createXULElement('toolbarbutton');
        var props = {
            id: 'aboutconfig-toolbar',
            label: 'About:Config',
            tooltiptext: 'About:Config',
            style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkUlEQVQ4ja2SX0hTcRTHv27euz/qLvfqdtO8lRmEoLm2RTTUmWHFtlgYIlFPleNuI5cggYTJpDGIVnP+CaVQ3FtCkYQvPfYSprewxCZCUYwgUKIeHIidHvSKiPrUef2ez/ec3/l9gf9VoijmhcPhq7FYbKizszNSUVFRvFOfATggsqgEUA5AtynYbDb78PDwfCaToaWlJUokEk8A6LfxZfHThsG3rcKk38reA3Bwq8hJktQSiUSmstksLS8vr9XX11/cokv3bRih0fI1Shyi+euGNMfAAQCMw+E4KoriSQD5jY2NiUwmQ0REsiz3qnDMhhEaMBNN24nuFtH4GShGwA4AOo/Hc01RFOrq6nqZTCa/K4pCCwtpejqammIY5kTMiiHqK1yjaTtRTwk9d2sWLDoEAZgAACzLVvb393+amZmh2dlZGhsbo0g0Sg/jiWz0WO7HvwlhVYVfuDWLJgZBAGYAOer7dDqd7qzX632dSqXoZlvbvBzu+BFv2E+rj0ykwuPnMcczCAEQdvohlud5r8fjeceybDOg9QdrKn/+8YMouo8mzmmpLI95ACB/jzSgiGGY4wDMDoejnYio54p35VldLk1UW+mWif/WUlratJcBALBOpzNAROSX5UkA0RqN/utEtZXSPh/Fef53myR1ANDuBBe6XK4gEVEgEHgFoA5AIQe0tHPc5w+1tZT2+aiX4+h2SUkfAIMKakRRbKCNktcnuwGwG7oxH2jqtli+vKmqotaCgulujlu5xPNu1UAbCoVGVQNBEG4A4LZtZ+CBy3fM5sUBSfrl57j3xRtBAgCjy+UaTCaTcxaLpQfA4V3uUyBotc2n9PrHPHABgHHTHUA1ACeAI7sdSB2G9RwYAeT8A0L0/bjRXZQXAAAAAElFTkSuQmCC)',
            class: 'toolbarbutton-1',
            onclick:
                    'if (event.button == 0) { \
                            var tabmail = document.getElementById("tabmail"); \
                            tabmail.openTab("contentTab", { url: "about:config" });\
                    };'
        };
        for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    
        var toolbox = document.getElementById("mail-toolbox");
        toolbox.palette.appendChild(toolbarbutton);
    
        var toolbar = document.getElementById("tabbar-toolbar");
        toolbar.insertItem("aboutconfig-toolbar", document.getElementById('ExtraConfigMenu-button')); 
    
    })();
    Alles anzeigen
  • bananovic
    Mitglied
    Reaktionen
    3
    Beiträge
    96
    Mitglied seit
    23. Jul. 2014
    • 24. Dezember 2021 um 11:54
    • #174

    Hier der Code für das 3. Script. War im vorherigen Post zu lang.

    RestartThunderbird.uc.js

    CSS
    //RestartThunderbird.uc.js ab 87.x
    
    "use strict";
    (function() {
    
        if (location != 'chrome://messenger/content/messenger.xhtml') return;
    
        // toolbox
        var toolbarbutton = document.createXULElement('toolbarbutton');
        var props = {
            id: 'restartthunderbird-toolbar',
            label: 'Neustart',
            tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
            style: 'list-style-image: url(data:image/png;base64,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)',
            class: 'toolbarbutton-1',
            onclick: 'if (event.button == 0) { \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            }; \
            if (event.button == 1 || event.button == 2) { \
            Services.appinfo.invalidateCachesOnRestart(); \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            };'
        };
        for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    
        var toolbox = document.getElementById("mail-toolbox");
        toolbox.palette.appendChild(toolbarbutton);    
    
        var toolbar = document.getElementById("tabbar-toolbar");
        toolbar.insertItem("restartthunderbird-toolbar", toolbar.lastChild);
       
       // popup
        var menuitem = document.createXULElement('menuitem');
        var props = {
            id: 'restartthunderbird-popup',
            label: 'Neustart',
            tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
            style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
            class: 'menuitem-iconic',
            onclick: 'if (event.button == 0) { \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            }; \
            if (event.button == 1 || event.button == 2) { \
            Services.appinfo.invalidateCachesOnRestart(); \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            };'
        };
        for (var p in props) menuitem.setAttribute(p, props[p]);
    
        var popup = document.getElementById('menu_FilePopup')
        popup.insertBefore(menuitem, document.getElementById('menu_FileQuitItem'));
    
        // pane
        var menuitem = document.createXULElement('menuitem');
        var props = {
            id: 'restartthunderbird-pane',
            label: 'Neustart',
            tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
            style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
            class: 'menuitem-iconic',
            onclick: 'if (event.button == 0) { \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            }; \
            if (event.button == 1 || event.button == 2) { \
            Services.appinfo.invalidateCachesOnRestart(); \
            Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
            };'
        };
        for (var p in props) menuitem.setAttribute(p, props[p]);
    
        var pane = document.getElementById('appmenuPrimaryPane');
        pane.insertBefore(menuitem, document.getElementById('appmenu-quit'));
    
    
    })();
    Alles anzeigen
  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 21. Januar 2022 um 02:25
    • #175

    Ich nutze ein umgebautes Skript für Firefox, um die Erweiterungen zu verwalten. Damit können u.a. die Einstellungsseiten der Erweiterungen in einem neuen Tab geöffnet werden, ohne dass man den Umweg über den Addons-Manager machen muss.

    Mit dem Code

    Code
    var optionsURL = addon.optionsURL || '';
    "switchToTabHavingURI" in window ? switchToTabHavingURI(optionsURL, true) : openTab("contentTab", { contentPage: optionsURL });

    findet das Skript die URL für die Einstellungsseite der jeweiligen Erweiterung, allerdings nur, wenn diese URL in der manifest.json definiert ist. In den Firefox-Erweiterungen ist das anscheinend ausnahmslos der Fall. In Thunderbird gibt es aber eine ganze Reihe Erweiterungen, bei denen das stattdessen in der background.js passiert. Diese URLs werden mit addon.optionsURL nicht gefunden. Das Skript zeigt diese Erweiterungen an wie solche, die keine Einstellungsseite haben.

    Eine dieser Erweiterungen ist Allow HTML Temp von Thunder.

    Wenn ich in der Konsole die URL für diese Erweiterung direkt in den obigen Code eingebe, wird tatsächlich die Einstellungsseite in einem neuen Tab geöffnet.

    Code
    "switchToTabHavingURI" in window ? switchToTabHavingURI("chrome://allowhtmltemp/content/options/aht_options.xhtml", true) : openTab("contentTab", { contentPage: "chrome://allowhtmltemp/content/options/aht_options.xhtml" });

    Meine Frage ist nun, wie das Skript diese URLs finden kann. Weiß jemand Rat, vielleicht auch Thunder?

    Hier das ganze Skript ExtensionOptionsMenu+TB.uc.js

    Einmal editiert, zuletzt von bege (24. Januar 2022 um 19:17)

  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 24. Januar 2022 um 19:19
    • #176

    jobisoft Es geht um die Frage im vorherigen Beitrag.

    Wenn ich mit dem Inspektor den Einstellungs-Button von Allow HTML Temp untersuche, wird auf die Datei implementation.js verwiesen, die in der Erweiterung integriert ist, aber von dir stammt. Mit diesem Skript wird der Pfad zu den Einstellungen erfragt.

    Kannst du mir einen Tipp geben, ob und evtl. wie ich das im Skript ExtensionsOptionsMenu+TB.uc.js verwenden kann?

    Edit: Oder ist das nur eine vorübergehende Lösung für Legacy-Erweiterungen, die in folgenden TB-Versionen wieder verschwindet? Dann kann ich auch darauf verzichten, wenn es eine komplexe Angelegenheit ist. (Ich bin nur "Bastler", nicht Entwickler, habe also wenig Ahnung von JavaScript.)

    Im Firefox funktioniert das Skript für alle Erweiterungen, weil es dort nur die Typ3- und Typ5-Erweiterungen gibt.

    Einmal editiert, zuletzt von bege (24. Januar 2022 um 19:40)

  • jobisoft
    Senior-Mitglied
    Reaktionen
    235
    Beiträge
    895
    Mitglied seit
    18. Aug. 2016
    Hilfreiche Antworten
    9
    • 7. März 2022 um 11:12
    • #177

    Das ist insoweit temporär, als dass Add-on Entwickler ihre Add-ons in echte WebExtensions konvertieren (der erste und einfachste Schritt ist oft sogar der Options-Dialog). Solange sie das nicht machen, ist Ihr Options-Button nicht "echt". Es gibt keinen einfachen Weg in diesem Fall an die Url der Options-Seite zu kommen, du musst den Quellcode der Add-ons parsen:

    1. Extrahiere Manifest für jedes Add-on: https://searchfox.org/comm-central/s…sExtra.js#76-89
    2. Gucke data.manifest.background.scripts an ( = array of background script urls).
    3. Lese jede background Datei ein: let content = await fetchFile(<url-from-scripts-array>)

    Code
        fetchFile: function (aURL, returnType = "Array") {
            return new Promise((resolve, reject) => {
                let uri = Services.io.newURI(aURL);
                let channel = Services.io.newChannelFromURI(uri,
                                     null,
                                     Services.scriptSecurityManager.getSystemPrincipal(),
                                     null,
                                     Components.interfaces.nsILoadInfo.SEC_REQUIRE_SAME_ORIGIN_INHERITS_SEC_CONTEXT,
                                     Components.interfaces.nsIContentPolicy.TYPE_OTHER);
    
                NetUtil.asyncFetch(channel, (inputStream, status) => {
                    if (!Components.isSuccessCode(status)) {
                        reject(status);
                        return;
                    }
    
                    try {
                        let data = NetUtil.readInputStreamToString(inputStream, inputStream.available());
                        if (returnType == "Array") {
                            resolve(data.replace("\r","").split("\n"))
                        } else {
                            resolve(data);
                        }
                    } catch (ex) {
                        reject(ex);
                    }
                });
            });
        },
    Alles anzeigen

    4. Suche in jeder Background Datei nach registerOptionsPage(<url-to-options-page>).

    Wenn das add-on kein data.manifest.background.scripts hat, musst du nach data.manifest.background.page ( = html page url) gucken und die html seite nach script tags parsen und so den scripts array selber zusammenbauen.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 7. März 2022 um 15:32
    • #178

    jobisoft

    Vielen Dank für die "Bastelanleitung"! Dann will ich mal sehen, ob ich das in das Skript einbauen kann.

  • Boersenfeger
    Senior-Mitglied
    Reaktionen
    115
    Beiträge
    1.523
    Mitglied seit
    3. Apr. 2005
    Hilfreiche Antwort
    1
    • 3. August 2022 um 15:30
    • #179

    Seit TB Version 102 funktioniert dieses Script nicht mehr, ein Klick auf den Button löst keine Aktion aus.

    Erwartet ist, das sich ein neuer Tab mit dem AddOns-Manager öffnet, die UpDate-Suche startet und entweder nötige UpDates angezeigt werden bzw. eine Einblendung erfolgt, das keine UpDates gefunden wurden.

    Jetzt wird ein leerer Tab geöffnet, der sich nicht wieder löschen lässt. Erst ein Neustart löscht diesen Tab wieder.

    Hier das verwendete Script

    JavaScript
    // Addons-Update-Check-Button.uc.js
    
    "use strict";
    (function() {
      if (location != 'chrome://messenger/content/messenger.xhtml') return;
    
        var toolbarbutton = document.createXULElement('toolbarbutton');
        var props = {
            id: 'addons-update-button',
            label: 'Add-ons Update',
            tooltiptext: '',
            style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gIGDi8Bp3Y5ZAAAAphJREFUOMt1k9trFVcUxn97z5yLeMBW0STnIEmjiE3jjVhBLJSWBoU+tLVQREGf+iQRGvFBBC/Qgpcn8VUKQv+A6lublhZf8lRQQwSTgCalJMVzMjNnZs+c2Xtmtg/B2zFZT3uzvu9ba+39LcEqsfUc/HsDGuN8tXtg5AMhRXl+ab41/eD53Q1baAY/v8YK1oiPf2qcOfvNhZu4FpUFeHGT3yb/WJwYe1R/E+euJVBkuEHHQ5YtofZpG4+O6ZS7cc6bl8Y4hJMr58W/w8mnm6dmdgxu+zYpIv6Zfnh/4vTUULfAOyMcurbtyud7v7iobYosQaXmEOmAZthkqfk/iYlJ8wSvpcyT+2rY6RY4de67v/obWylVJYWriXRAZAI6VmGrGioaW9WUN2ZOkeeBBBj5sT6273LfDwDGpoTaJzQ+ofaJTEBk2qgsJDERcRbT9hUmM0hX5E5jnK+vHL9+Z9f24cMLvY/ndg5uP5q7elVyUsQszoYz02c6/bqvIGnZGXfPwMgApQJp4cSXx35JbLQ6OY9JiwTlm3uAat6yF1a+UYqKygJC7ZOiiNYi5wm5NVAQv+WD+aWFlpc0aWuPB4+nJjfVaweNTN4hZ4VBCJAlMQzAp/SX3sN1ntfUvK2qk3PPnnYmTk/t7D287rKt6lczp8VKZSHAWqjU5IeVfRxqHHBvSYe2+36d1sTYo76XLSUmBmOJs5UHU765hyWRJfHRxkHnaHk99Aw5o0JC8J/IXe/22z5I8wTygravmD2f7gWSlzl5id97hpxRa1/Brezai4rXUlbbBLeWs+l7cRXoBersYH9tixwVEoQDNofOsk27l2n97K/qs55P5BHpily3WQAsgFPDWZ7Lr/rPRI5AdDyrlv8sbr4AjzKFxdWBwzsAAAAASUVORK5CYII=)',
            class: 'toolbarbutton-1',
            onclick:
                    'if (event.button == 0) { \
                            var tabmail = document.getElementById("tabmail"); \
                            tabmail.openTab("contentTab", { contentPage: "about:addons" }); \
                    };'
        };
        
        for (var p in props) toolbarbutton.setAttribute(p, props[p]);
    
        var toolbox = document.getElementById("mail-toolbox");
        toolbox.palette.appendChild(toolbarbutton);
    
        var toolbar = document.getElementById("tabbar-toolbar");
        toolbar.insertItem("addons-update-button", document.getElementById('ExtraConfigMenu-button')); 
        
      function onCommand(event) {
        let frameScript = function() {
          addEventListener('pageshow', function onPageshow(event) {
            if (event.target.location != 'about:addons')
              return;
            content.gViewController.doCommand('cmd_findAllUpdates');
            content.gViewController.doCommand('cmd_goToAvailableUpdates');
            removeEventListener('pageshow', onPageshow);
          });
        };
    
        window.gBrowser.selectedBrowser.messageManager.loadFrameScript(frameScriptURI, true);
      };
    
    
    })();
    Alles anzeigen

    Was muss ggf geändert werden?

    Windows 11 Pro 64bit

    Thunderbird 128.11.1 ESR 64bit

    Mein Windows 11 Sicherheitskonzept

    Probleme mit Firefox? Hier wird geholfen!

  • bege
    Mitglied
    Reaktionen
    6
    Beiträge
    148
    Mitglied seit
    29. Dez. 2008
    Hilfreiche Antworten
    3
    • 11. August 2022 um 01:22
    • #180
    Zitat von Boersenfeger

    tabmail.openTab("contentTab", { contentPage: "about:addons" });

    Ich komme damit leider auch nicht weiter. Ich hatte in einem anderen Skript:

    Code
    tabmail.openTab("contentTab", {url: "about:addons" }); 

    und das hat bis TB 91 funktioniert. Jetzt passiert leider gar nichts mehr. Wenn ich das (mit der Zeile davor) in der Konsole eingebe, bekomme ich den Fehler: tabInfo[selectedIndex].browser is undefined

    Alle anderen Versuche, z.B. mit dem Code für Firefox

    Code
    openTrustedLinkIn('about:config','tab');

    funktionieren auch nicht. Letzteres gibt den Fehler: Uncaught TypeError: browser is undefined

    • 1
    • 8
    • 9
    • 10
    • 25

Aktuelle Programmversion

  • Thunderbird 139.0.2 veröffentlicht

    Thunder 11. Juni 2025 um 17:31

Aktuelle ESR-Version

  • Thunderbird 128.11.1 ESR veröffentlicht

    Thunder 11. Juni 2025 um 17:27

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:

3,00 €
1
Per Paypal unterstützen*

*Weiterleitung zu PayPal.Me

Ähnliche Themen

  • Schaltfläche Konfigurations Editor aufrufen fehlt Thunderbird 68.7.0 (32-Bit)

    • sailor17
    • 5. Mai 2020 um 14:11
    • Allgemeines Arbeiten / Konten einrichten / Installation & Update
  • Merkwürdige Zeilen

    • Holger Fischer
    • 9. Juli 2021 um 11:07
    • Allgemeines Arbeiten / Konten einrichten / Installation & Update
  • Nach einem Update auf Version 78.10.0 funktioniert der Kalender nicht mehr

    • hpcraith
    • 23. April 2021 um 14:13
    • Erweiterungen für den Kalender
  • Nach Neuinstallation auf neuem PC zuerst Thunderbird zerschlagen, dann erfolgreiche Reparatur mit Hilfe des Forums, nun sind die "alten" Mails weg

    • Jungfrau
    • 20. Januar 2021 um 09:47
    • Migration / Import / Backups
  • Posteingangs-Ordner plötzlich leer!

    • bluebell
    • 7. November 2020 um 11:21
    • 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™
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Forum
  • Lexikon
  • Artikel
  • Seiten
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern