Atualizando extensões para o Firefox 3.5

  • Revision slug: Atualizando_extensões_para_o_Firefox_3.5
  • Revision title: Atualizando extensões para o Firefox 3.5
  • Revision id: 274478
  • Created:
  • Creator: Verruckt
  • Is current revision? Não
  • コメント 131 words added, 112 words removed

Revision Content

{{ fx_minversion_header("3") }}

Este artigo proporciona informação útil para desenvolvedores tentando atualizar suas extensões para trabalharem corretamente no Firefox 3.5.

Nota: Como o Firefox 3.5 foi anteriormente planejado para ser o Firefox 3.1, há algumas pequenas peculiaridades aqui. Em particular, até a construção do Firefox 3.5 beta 4 começar, o número da versão será Firefox 3.1b2 ou 3.1b3. Tenha isto em mente enquanto lê este texto.

Atualizações básicas

Esta seção cobre o básico do que você necessita fazer sempre que você atualiza uma extensão para uma nova versão do Firefox.

Teste sua extensão

Começe editando o arquivo install.rdf da sua extensão, atualizando maxVersion para 3.1b2 (se estiver testando no Firefox 3.1 beta 2), e aumente a versão da sua extensão.

Crie então um novo perfil no Firefox, para que os testes não coloquem em risco seu perfil usual. Navegue até o diretório contendo Firefox, e então digite o comando:

firefox -createProfile testBeta2

No Mac, você precisa navegar por todo o caminho da bundle aplicação Firefox:

cd /Applications/Firefox.app/Contents/MacOS/
firefox -createProfile testBeta2

Inicie o Firefox usando o novo perfil digitando este comando na linha de comeando:

firefox -P testBeta2

Teste a sua extensão cuidadosamente. Nós sugerimos que você configure as seguintes preferências para verdadeiro (true) com a finalidade de ser alertado para qualquer advertência ou exceção do JavaScript:

  • javascript.options.strict
  • javascript.options.showInConsole

Atualize sua extensão

Se você encontrar algum problema durante o teste, atualize seu código para corrigir os problemas. Este artigo contém informação sobre coisas que podem requisitar algum trabalho.

Uma vez que tenha feito isto, tente usar sua extensão novamente, desta vez com o perfil normal. Isto ajudará a assegurar a compatibilidade com qualquer dado existente salvo.

Atualize sua extensão em addons.mozilla.org

Finalmente, é hora de lançar sua extensão atualizada. Se a sua extensão não necessita de qualquer mudança no código, você pode simplesmente conectar-se ao painel AMO e atualizar a compatibilidade da versão por ali. Caso contrário será necessário enviar uma nova versão para o AMO.

Veja Submitting an add-on to AMO (EN) para informações adicionais.

Acessando o banco de dados do Places

Antes do Firefox 3.5, acessar o banco de dados do Places diretamente usando a API de Armazenamento (Storage API (EN)) requeria alguns truques:

var places = Components.classes["@mozilla.org/file/directory_service;1"].
                        getService(Components.interfaces.nsIProperties).
                        get("ProfD", Components.interfaces.nsIFile);
places.append("places.sqlite");
var db = Components.classes["@mozilla.org/storage/service;1"].
                    getService(Components.interfaces.mozIStorageService).openDatabase(places);

Isto constrói um caminho manual para o arquivo do banco de dados places.sqlite database, então abre o arquivo para o acesso ao armazenamento.

O Firefox 3.5 adiciona um serviço dedicado que oferece uma maneira mais conveniente para acessar o banco de dados do Places; a técnica a seguir não funciona no Firefox 3.1 ou anteriores.

var db = Components.classes["@mozilla.org/browser/nav-history-service;1"].
                    getService(Components.interfaces.nsPIPlacesDatabase).DBConnection;

Caixas de texto de Pesquisa

O tipo de caixa de texto (textbox (EN)) timed está depreciado; ao invés disso, você deve usar search.

No Firefox 3, você pode ter usado:

<textbox type="timed" timeout="1000" oncommand="alert(this.value);"/>

No Firefox 3.5, você deve mudar para:

<textbox type="search" timeout="1000" oncommand="alert(this.value);"/>

JSON

O módulo JavaScript JSON.jsm foi removido no Firefox 3.5 em favor do suporte nativo ao objeto JSON. Para detalhes, veja Using JSON in Firefox (EN) e o artigo em JSON (EN) para uma introdução mais geral sobre o JSON e como usá-lo em várias versões do Firefox.

Para assegurar a compatibilidade com o Firefox 3 e Firefox 3.5, você pode fazer o que segue:

if (typeof(JSON) == "undefined") {
  Components.utils.import("resource://gre/modules/JSON.jsm");
  JSON.parse = JSON.fromString;
  JSON.stringify = JSON.toString;
}

Isto funciona importando o módulo JavaScript JSON.jsm se o JSON não for suportado nativamente, mapeando então os métodos proporcionados por este módulo aos usados nativamente no JSON, então as mesmas chamadas funcinam.

Você pode também contornar este problema usando a interface {{ interface("nsIJSON") }} diretamente.

Mudanças no registro chrome

O Firefox 3.5 corrige falhas de segurança que tornam possível o uso remoto do chrome. Isto afetará qualquer complemento que inclua recursos em seu arquivo chrome.manifest que referencie a um web site. Veja Security changes in Firefox 3.1 (EN) para detalhes.

Conseguindo um contexto carregado através de requisição

Anteriormente, era possível conseguir um contexto carregado a partir de uma requisição por consulta a várias APIs docShell. Uma maneira correta e confiável de fazer isso é usar um {{ interface("nsILoadContext") }}.

Com o C++, você pode fazer como mostrado abaixo:

nsCOMPtr<nsILoadContext> loadContext;
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
NS_QueryNotificationCallbacks(channel, loadContext);

Com o JavaScript, você pode fazer desta maneira:

var loadContext;
try {
  loadContext = 
    aRequest.queryInterface(Components.interfaces.nsIChannel)
            .notificationCallbacks
            .getInterface(Components.interfaces.nsILoadContext);
} catch (ex) {
  try {
    loadContext =
      aRequest.loadGroup.notificationCallbacks
              .getInterface(Components.interfaces.nsILoadContext);
  } catch (ex) {
    loadContext = null;
  }
}

Barra de ferramentas customizável

No Firefox 3.5, o comportamento da barra de ferramentas customizável mudou, tal que o vínculo <xul:toolbar/> agora remove itens da barra de ferramentas do seu associado <xul:toolbarpalette/> e os adiciona na barra de ferramentas, ao invés de cloná-los e copiá-os para a barra de ferramentas. Isto significa que a paleta conterá agora somente itens não presentes na barra de ferramentas, ao contrário do comportamento anterior de conter todos os elementos, customizáveis ou não, exibidos na barra de ferramentas. Isto pode causar problemas para complementos dependendo da possibilidade de recuperar os itens da barra de ferramentas customizável através de <xul:toolbarpalette/>, ou de tentar dinamicamente inserir itens na paleta para torná-la disponível durante a customização da barra de ferramentas. Mais informações está disponível em {{ Bug("407725") }} e {{ Bug("467045") }}.

Novas características interessantes

"Listening" eventos em todas as abas

O Firefox 3.5 adicionou suporte para a adição e remoção de listeners que listen em todas as abas. Veja Listening to events on all tabs (EN) para detalhes.

Para desenvolvedores de temas:

  • Cheque Theme changes in Firefox 3.1 (EN).
  • Acesse o fórum Mozillazine Theme changes for FF3.1 (EN) para uma introdução / listagem de todas as mudanças entre o Firefox 3.0 e 3.5 que trazem impactos para os desenvolvedores. Isto diz respeito às novas características do CSS (como nth-child, -moz-box-shadow, etc), mudanças para widgets existentes, todas as melhorias da UI (User Interface - Interface do Usuário) e novas características do FF3.5 (suporte de áudio/vídeo, navegação privada, restauração de sessão extendida, sombras de caixas/janelas/textos).

 

Revision Source

<p>{{ fx_minversion_header("3") }}</p>
<p>Este artigo proporciona informação útil para desenvolvedores tentando atualizar suas extensões para trabalharem corretamente no Firefox 3.5.</p>
<div class="note"><strong>Nota:</strong> Como o Firefox 3.5 foi anteriormente planejado para ser o Firefox 3.1, há algumas pequenas peculiaridades aqui. Em particular, até a construção do Firefox 3.5 beta 4 começar, o número da versão será Firefox 3.1b2 ou 3.1b3. Tenha isto em mente enquanto lê este texto.</div>
<h2>Atualizações básicas</h2>
<p>Esta seção cobre o básico do que você necessita fazer sempre que você atualiza uma extensão para uma nova versão do Firefox.</p>
<h3>Teste sua extensão</h3>
<p>Começe editando o arquivo install.rdf da sua extensão, atualizando maxVersion para 3.1b2 (se estiver testando no Firefox 3.1 beta 2), e aumente a versão da sua extensão.<br>
<br>
Crie então um novo perfil no Firefox, para que os testes não coloquem em risco seu perfil usual. Navegue até o diretório contendo Firefox, e então digite o comando:</p>
<pre>firefox -createProfile testBeta2
</pre>
<p>No Mac, você precisa navegar por todo o caminho da <strong>bundle</strong> aplicação Firefox:</p>
<pre>cd /Applications/Firefox.app/Contents/MacOS/
firefox -createProfile testBeta2
</pre>
<p>Inicie o Firefox usando o novo perfil digitando este comando na linha de comeando:</p>
<pre>firefox -P testBeta2
</pre>
<p>Teste a sua extensão cuidadosamente. Nós sugerimos que você configure as seguintes preferências para verdadeiro (true) com a finalidade de ser alertado para qualquer advertência ou exceção do JavaScript:</p>
<ul> <li><code>javascript.options.strict</code></li> <li><code>javascript.options.showInConsole</code></li>
</ul>
<h3>Atualize sua extensão</h3>
<p>Se você encontrar algum problema durante o teste, atualize seu código para corrigir os problemas. Este artigo contém informação sobre coisas que podem requisitar algum trabalho.<br>
<br>
Uma vez que tenha feito isto, tente usar sua extensão novamente, desta vez com o perfil normal. Isto ajudará a assegurar a compatibilidade com qualquer dado existente salvo.</p>
<h3>Atualize sua extensão em addons.mozilla.org</h3>
<p>Finalmente, é hora de lançar sua extensão atualizada. Se a sua extensão não necessita de qualquer mudança no código, você pode simplesmente conectar-se ao painel AMO e atualizar a compatibilidade da versão por ali. Caso contrário será necessário enviar uma nova versão para o AMO.<br>
<br>
Veja <a class="internal" href="/en/Submitting_an_add-on_to_AMO" title="En/Submitting an add-on to AMO">Submitting an add-on to AMO</a> (EN) para informações adicionais.</p><h2>Acessando o banco de dados do Places</h2>
<p>Antes do Firefox 3.5, acessar o banco de dados do Places diretamente usando a API de Armazenamento (<a class="internal" href="/en/Storage" title="En/Storage">Storage API</a> (EN)) requeria alguns truques:</p>
<pre class="brush: js">var places = Components.classes["@mozilla.org/file/directory_service;1"].
                        getService(Components.interfaces.nsIProperties).
                        get("ProfD", Components.interfaces.nsIFile);
places.append("places.sqlite");
var db = Components.classes["@mozilla.org/storage/service;1"].
                    getService(Components.interfaces.mozIStorageService).openDatabase(places);
</pre>
<p>Isto constrói um caminho manual para o arquivo do banco de dados <code>places.sqlite</code> database, então abre o arquivo para o acesso ao armazenamento.</p>
<p>O Firefox 3.5 adiciona um serviço dedicado que oferece uma maneira mais conveniente para acessar o banco de dados do Places; a técnica a seguir não funciona no Firefox 3.1 ou anteriores.</p>
<pre class="brush: js">var db = Components.classes["@mozilla.org/browser/nav-history-service;1"].
                    getService(Components.interfaces.nsPIPlacesDatabase).DBConnection;
</pre><h2>Caixas de texto de Pesquisa</h2>
<p>O tipo de caixa de texto (<a class="internal" href="/en/XUL/textbox" title="En/XUL/Textbox"><code>textbox</code></a> (EN)) <code>timed</code> está depreciado; ao invés disso, você deve usar <code>search</code>.</p>
<p>No Firefox 3, você pode ter usado:</p>
<pre>&lt;textbox type="timed" timeout="1000" oncommand="alert(this.value);"/&gt;
</pre>
<p>No Firefox 3.5, você deve mudar para:</p>
<pre>&lt;textbox type="search" timeout="1000" oncommand="alert(this.value);"/&gt;
</pre><h2>JSON</h2>
<p>O módulo JavaScript JSON.jsm foi removido no Firefox 3.5 em favor do suporte nativo ao objeto JSON. Para detalhes, veja <a class="internal" href="/En/Using_native_JSON" title="/en/Using JSON in Firefox">Using JSON in Firefox</a> (EN) e o artigo em <a class="internal" href="/en/JSON" title="En/JSON">JSON</a> (EN) para uma introdução mais geral sobre o JSON e como usá-lo em várias versões do Firefox.</p>
<p>Para assegurar a compatibilidade com o Firefox 3 e Firefox 3.5, você pode fazer o que segue:</p>
<pre class="brush: js">if (typeof(JSON) == "undefined") {
  Components.utils.import("resource://gre/modules/JSON.jsm");
  JSON.parse = JSON.fromString;
  JSON.stringify = JSON.toString;
}
</pre>
<p>Isto funciona importando o módulo JavaScript JSON.jsm se o JSON não for suportado nativamente, mapeando então os métodos proporcionados por este módulo aos usados nativamente no JSON, então as mesmas chamadas funcinam.</p>
<p>Você pode também contornar este problema usando a interface {{ interface("nsIJSON") }} diretamente.</p><h2>Mudanças no registro chrome</h2>
<p>O Firefox 3.5 corrige falhas de segurança que tornam possível o uso remoto do chrome. Isto afetará qualquer complemento que inclua recursos em seu arquivo <code>chrome.manifest</code> que referencie a um web site. Veja <a class="internal" href="/En/Security_changes_in_Firefox_3.5" title="En/Security changes in Firefox 3.1">Security changes in Firefox 3.1</a> (EN) para detalhes.</p><h2>Conseguindo um contexto carregado através de requisição</h2>
<p>Anteriormente, era possível conseguir um contexto carregado a partir de uma requisição por consulta a várias APIs docShell. Uma maneira correta e confiável de fazer isso é usar um {{ interface("nsILoadContext") }}.</p>
<p>Com o C++, você pode fazer como mostrado abaixo:</p>
<pre class="brush: cpp">nsCOMPtr&lt;nsILoadContext&gt; loadContext;
nsCOMPtr&lt;nsIChannel&gt; channel = do_QueryInterface(aRequest);
NS_QueryNotificationCallbacks(channel, loadContext);
</pre>
<p>Com o JavaScript, você pode fazer desta maneira:</p>
<pre class="brush: js">var loadContext;
try {
  loadContext = 
    aRequest.queryInterface(Components.interfaces.nsIChannel)
            .notificationCallbacks
            .getInterface(Components.interfaces.nsILoadContext);
} catch (ex) {
  try {
    loadContext =
      aRequest.loadGroup.notificationCallbacks
              .getInterface(Components.interfaces.nsILoadContext);
  } catch (ex) {
    loadContext = null;
  }
}
</pre><h2>Barra de ferramentas customizável</h2>
<p>No Firefox 3.5, o comportamento da barra de ferramentas customizável mudou, tal que o vínculo<code> &lt;xul:toolbar/&gt; <span style="font-family: Verdana,Tahoma,sans-serif;">agora remove itens da barra de ferramentas do seu associado</span></code> <code>&lt;xul:toolbarpalette/&gt;</code> e os adiciona na barra de ferramentas, ao invés de cloná-los e copiá-os para a barra de ferramentas. Isto significa que a paleta conterá agora somente itens não presentes na barra de ferramentas, ao contrário do comportamento anterior de conter todos os elementos, customizáveis ou não, exibidos na barra de ferramentas. Isto pode causar problemas para complementos dependendo da possibilidade de recuperar os itens da barra de ferramentas customizável através de <code>&lt;xul:toolbarpalette/&gt;</code>, ou de tentar dinamicamente inserir itens na paleta para torná-la disponível durante a customização da barra de ferramentas. Mais informações está disponível em {{ Bug("407725") }} e {{ Bug("467045") }}.</p><h2>Novas características interessantes</h2>
<h3>"Listening" eventos em todas as abas</h3>
<p>O Firefox 3.5 adicionou suporte para a adição e remoção de <em>listeners</em> que <em>listen</em> em todas as abas. Veja <a class="internal" href="/En/Listening_to_events_on_all_tabs" title="en/Listening to events on all tabs">Listening to events on all tabs</a> (EN) para detalhes.</p><h2>Para desenvolvedores de temas:</h2>
<ul> <li>Cheque <a class="internal" href="../../../../En/Theme_changes_in_Firefox_3.1" rel="internal">Theme changes in Firefox 3.1</a> (EN).</li> <li>Acesse o fórum Mozillazine <a class="topictitle external" href="http://forums.mozillazine.org/viewtopic.php?f=18&amp;t=665138" title="http://forums.mozillazine.org/viewtopic.php?f=18&amp;t=665138">Theme changes for FF3.1</a> (EN) para uma introdução / listagem de todas as mudanças entre o Firefox 3.0 e 3.5 que trazem impactos para os desenvolvedores. Isto diz respeito às novas características do CSS (como nth-child, -moz-box-shadow, etc), mudanças para <em>widgets</em> existentes, todas as melhorias da UI (<em>User Interface</em> - Interface do Usuário) e novas características do FF3.5 (suporte de áudio/vídeo, navegação privada, restauração de sessão extendida, sombras de caixas/janelas/textos).</li>
</ul>
<p> </p>
Revert to this revision