Changes in Thunderbird 77
compose
The compose API functions beginNew, beginReply, and beginForward now return a Tab object for use with other API functions.
Listeners to the compose.onBeforeSend event are now called sequentially in the order they were added. Be aware that other extensions may see this event before or after yours does.
tabs
Events in the tabs and windows APIs now fire in many more situations:
Calendar tabs now fire tabs.onCreated, tabs.onActivated, and tabs.onRemoved just like other tabs do.
The first 3-pane tab in a main window now fires tabs.onCreated when the window opens.
Address book, composition, and message display windows now fire tabs.onCreated and tabs.onRemoved events as well as windows.onCreated and windows.onRemoved events. Each of these windows has exactly one tab in the tabs API and the added events reflect that.
Whether the
tabs
event happens before or after the correspondingwindows
event is non-deterministic.
composeScripts/tabs
Content script functions can now operate on a compose window “tab” in the same way they do on a content tab in Thunderbird or Firefox. (Despite the fact they don’t have tabs, compose windows have one tab object under the tabs API.) This requires the “compose” permission.
Here are some basic examples. See the MDN documentation for a more in-depth explanation.
// Where tabId is the id of a compose window tab: browser.tabs.executeScript(tabId, { code: `document.body.textContent = "Hey look, the script ran!";`, }); browser.tabs.executeScript(tabId, { file: "compose.js", }); browser.tabs.insertCSS(tabId, { code: "body { background-color: red; }", }); browser.tabs.insertCSS(tabId, { file: "compose.css", }); browser.tabs.removeCSS(tabId, { code: "body { background-color: red; }", }); browser.tabs.removeCSS(tabId, { file: "compose.css", });
Scripts can also be registered to run automatically on composition window “tabs”, using the new composeScripts API. Again, this works just like the contentScripts API:
let registeredScripts = await browser.composeScripts.register({ css: [ // Any number of code or file objects could be listed here. { code: "body { background-color: red; }" }, { file: "compose.css" }, ], js: [ // Any number of code or file objects could be listed here. { code: `document.body.textContent = "Hey look, the script ran!";` }, { file: "compose.js" }, ], });
Added code will run immediately and CSS will be immediately applied to already-open composition windows, and any new composition windows.
The returned value,
registeredScripts
in this example, is an object with which you can unregister the code/CSS:await registeredScripts.unregister();
Warning
This functionality has the ability to completely destroy every message being composed, with no way to undo it. Be careful!
Note
Javascript or CSS applied by these methods is not sent with the message. This is not a way to decorate messages or make them interactive.
Bugzilla list of fixed WebExtension API defects in Thunderbird 77.