--- title: Atualizando extensões para o Firefox 3.5 slug: Atualizando_extensões_para_o_Firefox_3.5 translation_of: Mozilla/Firefox/Releases/3.5/Updating_extensions ---
{{ fx_minversion_header(3.5) }}
Este artigo proporciona informação útil para desenvolvedores tentando atualizar suas extensões para trabalharem corretamente no Firefox 3.5.
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.
Começe editando o arquivo install.rdf
da sua extensão, atualizando maxVersion para 3.5b4 (if you're testing on Firefox 3.5 beta 4), 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 testBeta4
No Mac, você precisa navegar por todo o caminho da bundle aplicação Firefox:
cd /Applications/Firefox.app/Contents/MacOS/ firefox -createProfile testBeta4
Inicie o Firefox usando o novo perfil digitando este comando na linha de comeando:
firefox -P testBeta4
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
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.
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.
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.5 ou anteriores.
var db = Components.classes["@mozilla.org/browser/nav-history-service;1"]. getService(Components.interfaces.nsPIPlacesDatabase).DBConnection;
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);"/>
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.
Com o objetivo de suportar as novas características de áudio e vídeo adicionadas ao Gecko 1.9.1, a classe de nsContextMenu
foi renomeada de imageURL
para mediaURL
; entretanto, imageURL
foi adicionado novamente em 9 de junho de, 2009.
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, dados ou urls de recursos. Veja Security changes in Firefox 3.5 (EN) para detalhes.
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; } }
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) }}.
Iniciando o Firefox 3.5, você não pode mais usar data:
you can no longer use data:
bindings em pacotes chromeque possuem automatização XPCNativeWrapper
. Isto resolve um potencial problema de segurança.
Documentos XUL agora tem o tratamento XPCNativeWrapper
, então você agora precisa usar o método getAttribute()
para buscar valores de atributo ao invés de simplesmente lê-los diretamente.
Se a sua extensão está usando xpcnativewrappers=no
(o que não deveria ser feito em primeiro lugar, uma vez que não é seguro fazê-lo), o XBL desta extensão não será aplicado a documentos que estejam usando automatização XPCNativeWrapper
, começando no Firefox 3.5.
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.