To follow this tutorial you'll need to have learned the basics of jpm
.
If your add-on exports a function called main()
, then that function will be called whenever the add-on is loaded, and it will be passed an object containing a string describing the reason it was loaded as well as any arguments passed to it. If your add-on exports a function called onUnload()
, then that function will be called when the add-on is unloaded, and it will be passed a string describing the reason it was unloaded.
You don't have to use exports.main()
or exports.onUnload()
. You can just place your add-on's code at the top level instead of wrapping it in a function assigned to exports.main()
. It will be loaded in the same circumstances, but you won't get access to the load/unload reason or arguments.
exports.main()
Your add-on's main.js
code is executed as soon as it is loaded. It is loaded when it is installed, when it is enabled, or when Firefox starts.
If your add-on exports a function called main()
, that function will be called immediately after the overall main.js
is evaluated, and after all top-level require()
statements have run (so generally after all dependent modules have been loaded).
exports.main = function (options, callbacks) {};
options
is an object describing the parameters with which your add-on was loaded.
options.loadReason
options.loadReason
is one of the following strings describing the reason your add-on was loaded:
install enable startup upgrade downgrade
exports.onUnload()
If your add-on exports a function called onUnload()
, that function will be called when the add-on is unloaded.
exports.onUnload = function (reason) {};
reason
reason
is one of the following strings describing the reason your add-on was unloaded:
uninstall disable shutdown upgrade downgrade
If your add-on is disabled, then uninstalled, your onUnload
listener will only be called once, with the disable
reason. This happens because disabling an add-on also disables its onUnload
listeners, so there is no listener remaining when the add-on is uninstalled. For more, see bug 627432, in particular comment 12 on that bug.