Atualizando extensões para o Firefox 3
De MDC
Este artigo cobre características introduzidas no Firefox 3
Este artigo proporciona informações que serão úteis para desenvolvedores que desejam atualizar suas extensões para que trabalhem corretamente no Firefox 3.
Antes de continuar, há uma sugestão útil que podemos oferecer: se a única mudança que sua extensão requere é uma atualização no campo maxVersion no seu manifesto de instalação, e você hospedou sua extensão em addons.mozilla.org, você atualmente não precisa disponibilizar uma nova versão da sua extensão! Simplesmente use o Painel de Controle de Desenvolvedores em AMO para ajustar o maxVersion. Você pode evitar de ter sua extensão re-revisada por este caminho.
Tabela de conteúdo |
[editar] 1° Passo: Atualize o manifesto de instalação
O primeiro passo -- e, para muitas das extensões, o único que será necessário -- é atualizar o arquivo manifesto de instalação, install.rdf, para indicar compatibilidade com o Firefox 3.
Simplesmente ache a linha que indica a máxima versão compatível do Firefox (que, para o Firefox 2, pode indicar como aqui):
<em:maxVersion>2.0.*</em:maxVersion>
Mude isto para indicar compatibilidade com o Firefox 3:
<em:maxVersion>3.0.*</em:maxVersion>
Então reinstale sua extensão.
Note que o Firefox 3 acaba com o ".0" extra no número da versão, então, ao invés de usar "3.0.0.*", você precisa usar somente "3.0.*".
3.0.* maxVersion para os usuários antes que o Firefox 3 candidato a liberação seja lançado. Durante o período do Firefox 3 Beta, você pode usar 3.0b5 como sua maxVersion.Tem havido (e continuará a haver) um número de mudanças na API que poderão quebrar algumas extensões. Nós estamos trabalhando na compilação de uma lista completa destas mudanças.
Install.js ao invés de um manifesto de instalação, você precisa fazer a transição para um manifesto de instalação agora. O Firefox 3 não mais suporta os scripts install.js em arquivos XPI.[editar] Adicionando localizações para o manifesto de instalação
O Firefox 3 suporta novas propriedades no manifesto de instalação para especificar descrições localizadas. Os antigos métodos ainda funcionam, entretanto o novo Firefox permite pegar as localizações sempre que os complementos estiverem desabilitados e com instalação pendente. Veja Localizar descrições de extensões para mais detalhes.
[editar] 2° Passo: Assegure-se de estar oferecendo atualizações seguras
Se você está hospedando complementos por si mesmo e não em um provedor de hospedagem de complementos seguro como addons.mozilla.org então você precisa oferecer um método seguro de atualizar seu complemento. Isto poderá envolver a hospedagem das suas atualizações em um website SSL, ou usando chaves criptográficas para assinar a informação da atualização. Leia Atualizações Seguras para mais informações.
[editar] 3° Passo: Lidar com APIs mudadas
Várias APIs tiveram mudanças em caminhos significantes. As mais significantes delas, que provavelmente afetaram uma grande quantidade de extensões, são:
[editar] DOM
[editar] Favoritos & Histórico
Se sua extensão acessa dados dos favoritos ou do histórico de alguma maneira, ela precisará de um trabalho substancial para tornar-se compatível com o Firefox 3. As antigas APIs de acesso a estas informações foram substituidas pela nova arquitetura Places. Veja para detalhes na atualização da sua extensão existente para usar a API Places.
[editar] Gerenciador de Downloads
A API do Gerenciador de Downloads mudou ligeiramente devido à transição de um RDF para armazenar dados usando a API Storage. Esta pode ser uma transição muito fácil de fazer. Além disso, a API de monitoramento do progesso de downloads mudou para suportar múltiplos receptores no gerenciador de downloads. Veja nsIDownloadManager, nsIDownloadProgressListener, e Monitoring downloads para mais informações.
[editar] Gerenciador de Senhas
Se sua extensão acessa informações do login de usuário usando o Gerenciador de Senhas, será necessário atualizá-la para usar a nova API de Gerenciamento de Login.
- O artigo Using nsILoginManager inclui exemplos, incluindo uma demonstração de como escrever sua extensão para que trabalhe tanto com o Gerenciador de Senhas quanto com o Gerenciador de Login, então ela irá funcionar tanto no Firefox quanto em versões anteriores.
-
nsILoginInfo -
nsILoginManager
Você pode também sobrepor o armazenamento do gerenciador de senhas construído se você desejar fornecer a implementação de seu próprio armazenamento de senhas nas suas extensões. Veja Criando um módulo de armazenamento de Gerenciador de Login para mais detalhes.
[editar] Popups (Menus, Menus de Contexto, Dicas e Painéis)
O sistema de Popup XUL foi bastante modificado no Firefox 3. O sistema de Popup inclui menus principais, menus de contexto e painéis popup. Um guia de como using Popups foi criado, detalhando como o sistema trabalha. Uma coisa a se notar é que popup.Predefinição:XULMeth foi depreciado em favor do novo popup.Predefinição:XULMeth e popup.Predefinição:XULMeth.
[editar] Autocompletar
O método handleEnter() de interface nsIAutoCompleteController foi mudado para aceitar um argumento que indica quando o texto foi selecionado do popup autocompletar ou pelo usuário pressionando enter depois de digitar o texto.
[editar] DOMParser
- Quando um é
DOMParseré instanciado, ele herda o código principal dito e osdocumentURIebaseURIda janela de onde o construtor vier. - Se o chamador tiver privilégios UniversalXPConnect, ele pode passar parâmetros para
new DOMParser(). Se menos de três parâmetros forem passados, os parâmetros restantes serão padronizados paranull.- O primeiro parâmetro é o principal para uso; ele sobrepõe o padrão principal normalmente herdado.
- O segundo parâmetro é o
documentURIpara uso. - O terceiro parâmetro é o
baseURIpara uso.
- Se você inicializa um
DOMParserusando um contrato, somente através de uma chamadacreateInstance(), e não fizer a chamada do métodoinit()doDOMParser, tentando iniciar a operação de análise será criada automaticamente a inicialização deDOMParsercom um nulo principal e apontadoresnullparaDocumentURIebaseURI.
[editar] Interfaces removidas
As seguintes interfaces foram removidas do Gecko 1.9, que direcionam o Firefox 3. Se sua extensão faz uso de alguma destas, você precisará atualizar seu código:
-
nsIDOMPaintListener -
nsIDOMScrollListener -
nsIDOMMutationListener -
nsIDOMPageTransitionListener -
nsICloseAllWindows(see bug 386200)
[editar] 4° Passo: Cheque por mudanças relevantes no chrome
Houveram menores mudanças no chrome que podem requisitar mudanças no seu código. Uma nova vbox foi adicionada, chamada "browser-bottombox", que inclui a barra de procura e a barra de estado à janela do navegador. Embora ela não afete a aparência da exibição, ela pode afetar sua extensão se ela sobrepuser o chrome em relação a estes elementos.
Por exemplo, se você anteriormente sobrepôs algum chrome antes da barra de estado, como isto:
<window id="main-window"> <something insertbefore="status-bar" /> </window>
Você deve agora sobrepor desta maneira:
<vbox id="browser-bottombox"> <something insertbefore="status-bar" /> </vbox>
[editar] Outras mudanças
Mudanças simples adicionais que tiver de fazer enquanto atualiza sua extensão para trabalhar com o Firefox 3, aqui.
- chrome://browser/base/utilityOverlay.js não é mais suportada por razões de segurança. Se você previamente utilizava-a, você pode mudar para chrome://browser/content/utilityOverlay.js.
-
nsIAboutModuleimplementações são agora requeridas para suportar o métodogetURIFlags. Veja Predefinição:source para documentação. Isto afeta extensões que provém novas URIs about:. (bug 337746) - O elemento Predefinição:XULElem não é mais parte do "kit de ferramentas" (bug 339964). Isto significa que este elemento não está mais disponível para aplicações XUL e extensões. Ele continua a ser usado na janela principal do Firefox (browser.xul).
- Mudanças em nsISupports proxies [1] e possivelmente relacionado ao encadeamento de interfaces que precisam ser documentadas.
- Se você usa instruções de processamento XML, como
<?xml-stylesheet ?>em seus arquivos XUL, fique atento às mudanças feitas em bug 319654:- XML PIs foram agora adicionadas a um documento XML DOM. Isto significa que Predefinição:domxref não é mais garantida como o elemento raiz. Se você precisa pegar o documento raiz no seu script, use Predefinição:domxref ao invés.
- as instruções de processamento
<?xml-stylesheet ?>e<?xul-overlay ?>agora não tem efeito fora do documento prolog.
-
window.addEventListener("load", myFunc, true)não é mais ativado no carregamento de conteúdo web (carregamento de páginas no navegador). Isto foi devido ao bug 296639 que altera a maneira como as janelas internas e externas se comunicam. O simples conserto é para o uso degBrowser.addEventListener("load", myFunc, true)como descrito here e trabalha no Firefox 2 muito bem. -
content.window.getSelection()dá um objeto (que pode ser convertido para uma string portoString()) diferentemente do agora depreciadocontent.document.getSelection()que retorna uma string -
event.preventBubble()foi depreciado no Firefox 2 e foi removido no Firefox 3. Useevent.stopPropagation(), que funciona bem no Firefox 2. - Contadores que são inciados usando
setTimeout()estão agora bloquados por janelas modais devido à correção para bug 52209. Você pode usarnsITimerno lugar.