Listening for Load and Unload

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.