This article gives suggestions on how to set up your Mozilla application for extension development. Unless otherwise specified, these suggestions apply to both Firefox and Thunderbird as well as SeaMonkey version 2.0 and above.
about:config
.To avoid performance degradation from development-related prefs and extensions, and to avoid losing your personal data, you can use a separate profile for development work.
You can run two instances of Thunderbird or Firefox at the same time by using separate profiles and starting the application with the -no-remote
parameter. For example, the following command will start Firefox with a profile called "dev" whether an instance of Firefox is already running or not.
On Ubuntu (and many other Linux distributions):
/usr/bin/firefox -no-remote -P dev
On some other distributions of Linux/Unix:
/usr/local/bin/firefox -no-remote -P dev
On Mac OS Snow Leopard (10.6) and newer:
/Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote -P dev &
On Mac OS Leopard (10.5) and older, you must request the 32-bit portion of the Universal Binary (https://bugzilla.mozilla.org/show_bug.cgi?id=622970 ):
arch -arch i386 /Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote -P dev &
On Windows:
Start -> Run "%ProgramFiles%/Mozilla Firefox/firefox.exe" -no-remote -P dev
On Windows 64 bit:
Start -> Run "%ProgramFiles(x86)%/Mozilla Firefox/firefox.exe" -no-remote -P dev
To start Thunderbird or SeaMonkey instead of Firefox, substitute "thunderbird" or "seamonkey" for "firefox" in the examples above.
If the profile specified does not exist (or if no profile is specified), Thunderbird or Firefox will display the Profile Manager. To run with the default profile, specify "default" as the profile (or omit the "-P" switch).
(There is a thread in the Mozillazine forums that explains how to use both stable and development versions of Firefox to check extension compatibility. See Installing Firefox 3 or Minefield while keeping Firefox 2 .)
To make the numerous restarts easier, you can make one for reading documentation / for regular use, and the other one for extensions' testing, and run them at the same time using the no-remote
command switch as described at http://kb.mozillazine.org/Command_line_arguments . The first one often needs lots of restarts, and you can launch both of them at the same time, like these two shortcuts on Windows:
...firefox.exe -no-remote -p "profile1"
...firefox.exe -no-remote -p "profile2"
replace "..." with some real path. It is simple - just two shortcuts on the desktop - and lets you keep one of the profiles always open.
As of Gecko 2 (Firefox 4), JavaScript files are cached ("fastload"). The -purgecaches
command-line flag disables this behavior. Alternatively, you can set the MOZ_PURGE_CACHES environment variable. See this bug for more information.
There is a set of development preferences that, when enabled, allows you to view more information about application activity, thus making debugging easier. However, these preferences can degrade performance, so you may want to use a separate development profile when you enable these preferences. For more information about Mozilla preferences, refer to the mozillaZine article on "about:config ".
Not all preferences are defined by default, and are therefore not listed in about:config
by default. You will have to create new (boolean) entries for them.
window.dump
for more info. You can use nsIConsoleService
instead of dump()
from a privileged script.
The Error Console is disabled by default starting in Firefox 4. You can re-enable it by changing the devtools.errorconsole.enabled
preference to true
and restarting the browser. With this, javascript.options.showInConsole
is also set to true
by default.
To change preference settings in Firefox or SeaMonkey, type about:config
in the Location Bar. Alternatively, use the Extension Developer's Extension , which provides a menu interface for Firefox settings.
To change preference settings in Thunderbird, open the "Preferences" (Unix) or "Options" (Windows) interface. On the "Advanced" page, select the "General" tab then click the "Config Editor" button.
These extensions may help you with your development.
Extension files are normally installed in the user profile. However, it is usually easier to place extension files in a temporary location, which also protects source files from accidental deletion. This section explains how to create a proxy file that points to an extension that is installed in a location other than the user profile.
extensions
" directory under your profile directory with the extension's ID as the file name (for example "your_profile_directory/extensions/{46D1B3C0-DB7A-4b1a-863A-6EE6F77ECB58}
"). (How to find your profile directory ) Alternatively, rather than using a GUID, create a unique ID using the format "name@yourdomain" (for example [email protected]
).The contents of this file should be the path to the directory that contains your install.rdf file. (eg. "/full/path/to/yourExtension/
". Windows users should use the drive name (CAPS) and backslashes instead of frontslashes (for example "C:/full/path/to/yourExtension/
" or "C:/sam/workspace/toolbar/helloWorldtoolbar/
"). Remember to include the closing slash and remove any trailing whitespace.
extensions.cache
, extensions.ini
, extensions.rdf
, are all regenerated by Firefox if deleted. You need to delete them if you mess with 'components', no harm done. If you do not initially delete these files the first time you try to load your extension, then the extension will silently not load. Firefox will disconnect from its parent process when it regens these files, so you may have to exit once and restart if you use the OS console.)
Regardless of whether you choose to eventually package your extension's chrome in a JAR or in directories, developing in directories is simpler. If you choose a JARed structure for releasing, you can still develop with a directory structure by editing your chrome.manifest. For example, rather than having
content myExtension jar:chrome/myExtension.jar!/content/
use
content myExtension chrome/content/