Esse artigo dá sugestões de como preparar seu aplicativo Mozilla para o desenvolvimento de extensões. A menos que seja dito o contrário, essas sugestões se aplicam tanto ao Firefox quanto ao Thunderbird, assim como ao SeaMonkey versão 2.0 e superior.
Visão Geral
- Crie um peril de usuário para desenvolvimento para executar sua sessão de desenvolvimento do Firefox, com preferência de desenvolvimento especiais em
about:config
. - Instale alumas extensões de desenvolvimento para Firefox em seu perfil de desenvolvimento.
- Edite arquivos na pasta de extensões de seu perfil e reinicie o aplicativo com o perfil de desenvolvimento.
Perfil de Desenvolvimento
Para evitar a degradação de desempenho das extensões e prefs relacionadas ao desenvolvimento, e para evitar perder seus dados pessoais, você pode usar um perfil a parte para o trabalho de desenvolvimento.
Você pode executar duas instâncias do Thunderbird ou do Firefox ao mesmo tempo usando perfis diferentes e iniciando o aplicativo com o parâmetro -no-remote
. Por exemplo, o seguinte comando vai iniciar o Firfox com um perfil chamado "dev" quer uma instância do firefox já esteja em execução ou não.
No Ubuntu (e muitas outras distro do Linux):
/usr/bin/firefox -no-remote -P dev
Em algumas outras distros do Linux/Unix:
/usr/local/bin/firefox -no-remote -P dev
No Mac OS Snow Leopard (10.6) e mais recentes:
/Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote -P dev &
No Mac OS Leopard (10.5) e versões mais antigas, você requisitar a porção de 32-bit portion do Binário Universal (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 &
No Windows:
Start -> Run "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -P dev
No Windows 64 bit:
Start -> Run "%ProgramFiles(x86)%\Mozilla Firefox\firefox.exe" -no-remote -P dev
Para inicar o Thunderbird ou o SeaMonkey ao invés do Firefox, substitua "firefox" por "thunderbird" ou "seamonkey" nos exemplos acima.
Se o perfil especificado não existir (ou se nennhum perfill for especificado), o Thunderbird ou Firefox irá exibir o Profile Manager (Gerenciador de Perfis). Para executar com o perfil padrão (default), especifique "default" como sendo o perfil (ou omita a chave "-P" ).
(Existe uma linha (thread) no Mozillazine forums que explica como usar tanto a versão estável como a de desenvolvimento do Firefox para verificar a compatibilidade da extensão Veja Instalando o Firefox 3 ou Campo minado ao se manter o Firefox 2.)
Para tornar as numerosas reinicializações mais suaves, você pode criar um para ler a documentação / para uso regular, e o outro para testar as extensões, e executar ambos ao mesmo tempo usando a chave de comando no-remote
como descrito em https://kb.mozillazine.org/Command_line_arguments . O segundo geralmente requer muitas reinicializações, e você pode abrir ambos ao mesmo tempo, ccomo nesses dois atalhos no Windows:
...firefox.exe -no-remote -p "profile1"
...firefox.exe -no-remote -p "profile2"
No Mac, crie um bash script, nomei-o com a extensão (de arquivo) ".command". A opção de perfil é "-P" (maiúsculo).
#!/bin/bash
"..."/Contents/MacOS/firefox -P "profile1"
substitua os "..." com o caminho verdadeiro (para a pasta de instalação do seu aplicativo mozilla - firefox, thunderbird, etc.). É simples - basta dois atalhos na Área de Trabalho (desktop) - e você fica com um dos perfis sempre aberto.
Sinalizadores (flags) de comando para desenvolvimento
A partir do Gecko 2 (Firefox 4), os arquivos JavaScript files são postos em cache ("fastload" - "carga rápida"). O sinalizador de comando -purgecaches
disablita esse comportamento. Como alternativa, você pode ajustar a variável de ambiente MOZ_PURGE_CACHES. See esse bug para mais informações.
Preferências para desenvolvimento
Instarlar a extensão Developer Profile (Perfil do Desenvolvedor) ajusta a maior parte do ambiente de desenvolvimento descrito abaixo.
Há um conjunto de preferências de desenvolvimento que quando habilitadas permitem que você veja mais informação sobre a atividade do aplicativo, tornando, dessa forma, a depuração mais fácil. Contudo, essas preferências podem degradar o desempenho, de modo que você pode preferir usar um perfil diferente para desenvolvimento aonde você habilita essas preferências. Para mais informações sobre as preferências do Mozilla, veja o artigo da mozillaZine sobre "about:config".
Nem todas as preferências estão definidas por princípio, e portanto, nãos estão listadas em about:config
a princípio. Você terá que criar novas entradas booleanas para elas.
- javascript.options.showInConsole = true. Envia os errors nos arquivos do chrome para o Error Console (Console de Erros).
- nglayout.debug.disable_xul_cache = true. Desabilita o cache dos arquivos XUL de modo que as mudanças nas janelas e caixas de diálogos não exijam a reinicialização do aplicativo. Supõe-se que você esteja trabalhnado com diretórios ao invés de arquivos JAR. Mudanças nos XUL overlays ainda exigirão que o documento seja carregado novamente.
- browser.dom.window.dump.enabled = true. Habilita o uso da função dump() para imprimir no console padrão. Veja
window.dump
para mais informações. Você pode usar a interfacensIConsoleService
ao invésdump()
a partir de um script privilegiado. - javascript.options.strict = true. Habilita os avisos de modo strict de JavaScript no Console de Erro. Observe que muitas pessoas tem essa aspecto desabililtado ao desenvolver seus aplicativos, por isso você verá muitos avisos de problemas com os códigos deles além dos de sua própria extensão. Você poderá filtrá-los com a extensão Console2.
- devtools.chrome.enabled = true. Isso possibilita executar fragmentos de código JavaScript no contexto do chrome do Scratchpad a partir do menu Ferramentas. Não se esqueça de alterna o contexto de conteúdo para navegador.
- devtools.debugger.remote-enabled = true. Isso acrescenta uma entrada "Depurar" no submenu do menu "Desenvolvedor Web". O Browser Debugger (Depurador do Navegador) pode ser usado para depurar o código JavaScript das extensões.
- extensions.logging.enabled = true. This will send more detailed information about installation and update problems to the Error Console. (Note that the extension manager automatically restarts the application at startup sometimes, which may mean you won't have time to see the messages logged before the automatic restart happens. To see them, prevent the automatic restart by setting the environment NO_EM_RESTART to 1 before starting the application.)
- nglayout.debug.disable_xul_fastload = true. For Gecko 2.0+ (Firefox 4.0+). See this bug for more information. Although the bug has been closed, it is believed that this pref is still relevant.
- You might also want to set dom.report_all_js_exceptions = true. See Exception logging in JavaScript for details.
- devtools.errorconsole.deprecation_warnings. Detect deprecated code use.
nglayout.debug.disable_xul_fastload
to true in a production environment; it exists solely to aid in debugging. In particular, add-ons should never change this preference.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.
Accessing Firefox development preferences
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.
Accessing Thunderbird development preferences
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.
Extensões para Desenvolvimento
Essas extensões podem te ajudar com o desenvolvimento de extensões.
- DOM Inspector, usada para inspecionar e editar o DOM vivo (em tempo real) de qualquer documento da web ou aplicativo XUL (Firefox and Thunderbird)
- Venkman, um Depurador (Debugger) de JavaScript (versão para Firefox, versão para Thunderbird)
- Thunderbird Developer Tools, permite depurar o Thunderbird remotamente usando as ferramentas de desenvolvimento do Firefox
- Extension Developer's Extension a suite of tools for extension development (Firefox)
- Extension Test an add-on which makes it easier to detect problems which will lead to rejection by addons.mozilla.org
- Console² enhanced JavaScript console (Firefox version, Thunderbird version)
- Javascript Command for writing/testing javascript on Firefox windows
- Inspect Context Open DOM Inspector at this node from Inspect on context menu.
- Chrome List navigate and view files in chrome:// (Firefox version, Thunderbird version)
- Chrome Edit Plus a user file editor (Firefox and Thunderbird)
- Add-on Builder a web-based application that generates an extension skeleton (Firefox, Thunderbird, and others)
- Firebug a variety of development tools (Firefox)
- Pentadactyl, a general purpose extension with builtin tools for extension development, including a command line with chrome JavaScript evaluation (including property and function argument completion) and the ability to demand-load external JavaScript and CSS files into window chrome.
- Chromebug combines elements of a JavaScript debugger and DOM (Firefox, "kinda works for Thunderbird")
- MozRepl explore and modify Firefox and other Mozilla apps while they run (Firefox, Thunderbird version is not working)
- ExecuteJS an enhanced JavaScript console (Firefox version, Thunderbird version is not working)
- XPCOMViewer an XPCOM inspector (Firefox and Thunderbird)
- JavaScript shells to test snippets of JavaScript (Firefox and Thunderbird)
- SQLite Manager to manage the SQLite database (Firefox and Thunderbird)
- ViewAbout enables access to various about: dialogs from the View menu (Firefox version, Thunderbird version )
- Crash Me Now! useful for testing debug symbols and the crash reporting system (Firefox and Thunderbird)
- Javascript Object Examiner displays JavaScript object methods and properties for any available scope
- Developer Profile sets up the development environment described above when installed (Firefox and Fennec)
Firefox extension proxy file
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.
- Get the extension ID from the extension's install.rdf file.
- Create a file in the "
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]
) - then the proxy filename will be same as that ID, with no curly brackets {}. -
The contents of this file should be the path to the directory that contains your install.rdf file, for example
/full/path/to/yourExtension/
on Mac and Linux, andC:\full\path\to\yourExtension\
on Windows. Remember to include the closing slash and remove any trailing whitespace.- Note: If you already installed the extension via XPI, you should uninstall it first before creating the pointer file.
- Also note that the use of proxy files requires that the extension's chrome.manifest defines its chrome urls using traditional directories, rather than a JARed structure. See below.
- Place the file in the extensions folder of your profile and restart the application.
Using directories rather than JARs
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/
Preventing the first launch extension selector
Starting in Firefox 8, on the first launch of a new version of Firefox, it presents user interface letting users select which third party add-ons to keep. This lets them weed out add-ons that were installed without their knowledge, or that are no longer needed.
However, this interface can be disruptive when debugging add-ons. You can avoid this by setting the preference extensions.autoDisableScopes
to 14.