Changes in Thunderbird 82

compose

tabs

  • The connect and sendMessage functions now work as they do in Firefox.

    This change has been backported to Thunderbird 78.4.0.

messageDisplayScripts/tabs

  • Content script functions can now operate on a message display “tab” in the same way they do on a content tab in Thunderbird or Firefox. This requires the new “messagesModify” permission.

    This change has been backported to Thunderbird 78.4.0.

    Here are some basic examples. See the MDN documentation for a more in-depth explanation.

    // Where tabId is the id of a message display tab:
    
    browser.tabs.executeScript(tabId, {
      code: `document.body.textContent = "Hey look, the script ran!";`,
    });
    
    browser.tabs.executeScript(tabId, {
      file: "display.js",
    });
    
    browser.tabs.insertCSS(tabId, {
      code: "body { background-color: red; }",
    });
    
    browser.tabs.insertCSS(tabId, {
      file: "display.css",
    });
    
    browser.tabs.removeCSS(tabId, {
      code: "body { background-color: red; }",
    });
    
    browser.tabs.removeCSS(tabId, {
      file: "display.css",
    });
    
  • Scripts can also be registered to run automatically on messages being displayed, using the new messageDisplayScripts API.

    This change has been backported to Thunderbird 78.4.0.

    Again, this works just like the contentScripts API:

    let registeredScripts = await browser.messageDisplayScripts.register({
      css: [
        // Any number of code or file objects could be listed here.
        { code: "body { background-color: red; }" },
        { file: "display.css" },
      ],
      js: [
        // Any number of code or file objects could be listed here.
        { code: `document.body.textContent = "Hey look, the script ran!";` },
        { file: "display.js" },
      ],
    });
    

    Added code will run immediately and CSS will be immediately applied to already-open message display tabs or windows, and any new message display tabs or windows.

    The returned value, registeredScripts in this example, is an object with which you can unregister the code/CSS:

    await registeredScripts.unregister();
    

Note

This functionality does not permanently alter messages, only what the user sees when they are displayed.