Preparando um ambiente para o desenvolvimento de extensões

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

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 http://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"

Essas linhas são específicas do Windows. Se você encontrar as mesmas instruções para Linux / Mac OS / etc , por favor coloque-as aqui também.

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 interface nsIConsoleService ao invés dump() 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.

Warning: Never set 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.
.

Gecko 2.0 note
(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)

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.

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.

  1. Get the extension ID from the extension's install.rdf file.
  2. 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 chromebug@mydomain.com) - then the proxy filename will be same as that ID, with no curly brackets {}.
  3. 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, and C:\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.
  4. 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/

(Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)

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.

Etiquetas do documento e colaboradores

 Colaboradores desta página: janlima
 Última atualização por: janlima,