Components.interfaces.
nsIMsgCompDeliverMode
nsIMsgCompSendFormat
nsIMsgCompConvertible
nsIMsgCompType
nsIMsgCompFormat
nsIAbPreferMailFormat
nsIPlaintextEditorMail
nsISupportsString
mozISpellCheckingEngine
document.getElementById()
, document.querySelectorAll()
or similar methods. The documents these methods have been used with have probably changed dramatically. Check out searchfox.org to learn about the current layouts.<listbox>
related elements have been removed. Use<richlistbox>
instead. A <richlistbox>
does not support cells or columns, just one <richlistitem>
per row (which can contain multiple other elements like hbox
, vbox
, label
or image
elements)listbox/richtlistbox
methods have been removed and can be replaced as follows:listbox.appendItem(label, value)
:listbox.insertItemAt(index, label, value)
:listbox.removeItemAt(index)
:dialog
as follows:DOCTYPE
changed and the preference
attribute now contains the full ID of the preference. If you used more than one prefpane
you need to rework the UI into tabs.preferencesBindings.js
at the bottom, which is mandatory to recreate the functionality of the preference
attribute. It is also mandatory, that you include a custom JavaScript file (aspreferences.js
in the above example) afterwards, which defines the types of the used preferences (which was formerly done inside the preferences
tag). The file can be as short as this:type
attribute and a cancel button to the dialog:preference
attribute (and preferencesBindings.js
) and directly use the preferences service instead. Check out options.xul and options.js of the Shrunked Image Resizer.hbox
elements with an appropriate class
identifier:hbox
as a replacement for the statusbarpanel
, like label
or image
.menulist
no longer supports the editable
attribute. However, editable menulists have been re-implemented as custom elements. To be able to use it, you need some extra files to be linked from your document:menupopup
element is defined as a direct child of the menulist
element in the above example, it cannot be accessed bymenupop
element, or get it bymenulist
element.groupbox
tag continues to work, the caption
tag has been removed. Use the following now:datetimepicker
, which can be used.Date
object:datetimepicker
, the following CSS files need to be included:let notifyBox = specialTabs.msgNotificationBar;
let notifyBox = gNotification.notificationbox;
let notifyBox = gMessageNotificationBar.msgNotificationBar;
let notifyBox = gNotification.notificationbox;
notifyBox.removeAllNotifications();
let notification = notifyBox.getNotificationWithValue(value);
notificationbox.removeNotification(notification);
mail-multi-emailHeaderField
has been renamed into mail-multi-emailheaderfield
(no camelCase anymore).treecol
can be either shown or hidden via the column picker. Up to TB68 the column picker closed after a column had been selected/toggled. By adding closemenu="none"
to a treecol
, the column picker stays open after the display state of associated treecol
has been toggled.<dialog>
and you wanted to respond to the buttons being pressed, you’d have something like this:preventDefault()
. A return value is not needed.ondialogaccept
, ondialogextra1
, ondialogextra2
and ondialogcancel
.<dialog>
events also applies to all onwizard…
events on <wizard>
, and onpage…
events on <wizardpage>
..jsm
extension. Most notably:mailServices.js
has been renamed to MailServices.jsm
. This change was originally backwards-compatible with a deprecation warning, but the changes to module importing (see below) made that pointless and the old file has now been removed completely.MailUtils.js
is now MailUtils.jsm
.MailUtils.getFolderForUri
was renamed to MailUtils.getExistingFolder
.ChromeUtils.import
is a replacement for Components.utils.import
(which was also changed in this way). Note that no second argument is supplied. The returned object is a dictionary of only the objects listed in EXPORTED_SYMBOLS
.defaultAccount
member can (since TB 65) have a null
value - if for some reason it doesn't have, or can't work out, the default account.onDataAvailable
method lost its context
argument. This was removed in bug 1525319 which breaks the API.onStartRequest
and onStopRequest
methods also no longer have a context
argument, which could be detected in a similar way.newChannel
was removed and newChannel2
was renamed to newChannel
. (Bug 1528971.)newChannel
has been unused for a long time it should be safe to just replace the old newChannel
implementation with the newChannel2
and forward calls from newChannel2
.convertFromByteArray
has been removed. The new preferred way to deal with unicode is through the TextEncoder
and TextDecoder
classes.Element
, Node
, etc. instead, which are now available in all scopes.Cc[...].createInstance(Ci....)
, but simply via the new
keyword:new DOMParser();
new XMLSerializer();
new XMLHttpRequest();
Cu.importGlobalProperties(["DOMParser"]);
Cu.importGlobalProperties(["XMLSerializer"]);
Cu.importGlobalProperties(["XMLHttpRequest"]);
tree
object is now a XULTreeElement
. It has lost thetreeBoxObject
property, because the nsITreeBoxObject
has been removed. Most of its methods can now be accessed directly through the tree
object. For example:nsITreeColumn
has been replaced by the TreeColumn
object. Even though their interfaces look the same, they could behave differently. Check your implementation, as this affects almost all methods of nsITreeView
.TreeColumn
parameter, a simple { id: columnName }
object no longer works. Get a proper TreeColumn
object via tree.columns.getNamedColumn(columnName)
.TreeColumn
object no longer has a selectable
attribute and nsITreeView
has lost its isSelectable()
method.