1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
---
title: Atualização das extensões para o Firefox 3
slug: Mozilla/Firefox/Releases/3/Updating_extensions
tags:
- Firefox 3
translation_of: Mozilla/Firefox/Releases/3/Updating_extensions
original_slug: Atualizando_extensões_para_o_Firefox_3
---
<div><section class="Quick_links" id="Quick_Links">
<ol>
<li class="toggle">
<details>
<summary>Firefox developer release notes</summary>
<ol>
<li><a href="/pt-PT/docs/Mozilla/Firefox/Releases">Firefox developer release notes</a></li>
</ol>
</details>
</li>
<li class="toggle">
<details>
<summary>Add-ons</summary>
<ol>
<li><a href="/pt-PT/Add-ons/WebExtensions">Browser extensions</a></li>
<li><a href="/pt-PT/Add-ons/Themes">Themes</a></li>
</ol>
</details>
</li>
<li class="toggle">
<details>
<summary>Firefox internals</summary>
<ol>
<li><a href="/pt-PT/docs/Mozilla/">Mozilla project</a></li>
<li><a href="/pt-PT/docs/Mozilla/Gecko">Gecko</a></li>
<li><a href="/pt-PT/docs/Mozilla/Firefox/Headless_mode">Headless mode</a></li>
<li><a href="/pt-PT/docs/Mozilla/JavaScript_code_modules">JavaScript code modules</a></li>
<li><a href="/pt-PT/docs/Mozilla/js-ctypes">JS-ctypes</a></li>
<li><a href="/pt-PT/docs/Mozilla/MathML_Project">MathML project</a></li>
<li><a href="/pt-PT/docs/Mozilla/MFBT">MFBT</a></li>
<li><a href="/pt-PT/docs/Mozilla/Projects">Mozilla projects</a></li>
<li><a href="/pt-PT/docs/Mozilla/Preferences">Preference system</a></li>
<li><a href="/pt-PT/docs/Mozilla/WebIDL_bindings">WebIDL bindings</a></li>
<li><a href="/pt-PT/docs/Mozilla/Tech/XPCOM">XPCOM</a></li>
<li><a href="/pt-PT/docs/Mozilla/Tech/XUL">XUL</a></li>
</ol>
</details>
</li>
<li class="toggle">
<details>
<summary>Building and contributing</summary>
<ol>
<li><a href="/pt-PT/docs/Mozilla/Developer_guide/Build_Instructions">Build instructions</a></li>
<li><a href="/pt-PT/docs/Mozilla/Developer_guide/Build_Instructions/Configuring_Build_Options">Configuring build options</a></li>
<li><a href="/pt-PT/docs/Mozilla/Developer_guide/Build_Instructions/How_Mozilla_s_build_system_works">How the build system works</a></li>
<li><a href="/pt-PT/docs/Mozilla/Developer_guide/Source_Code/Mercurial">Mozilla source code</a></li>
<li><a href="/pt-PT/docs/Mozilla/Localization">Localization</a></li>
<li><a href="/pt-PT/docs/Mozilla/Mercurial">Mercurial</a></li>
<li><a href="/pt-PT/docs/Mozilla/QA">Quality assurance</a></li>
<li><a href="/pt-PT/docs/Mozilla/Using_Mozilla_code_in_other_projects">Using Mozilla code in other projects</a></li>
</ol>
</details>
</li>
</ol>
</section></div>
<p> Este artigo proporciona informações úteis para desenvolvedores que desejam atualizar suas extensões para que funcionem corretamente no Firefox 3.</p>
<p>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 <code>maxVersion</code> no seu manifesto de instalação, e você hospedou sua extensão em <a class="link-https" href="https://addons.mozilla.org">addons.mozilla.org</a>, 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 <code>maxVersion</code>. Você pode evitar de ter sua extensão re-revisada por este caminho.</p>
<h3 id="1.C2.B0_Passo_Atualize_o_manifesto_de_instala.C3.A7.C3.A3o" name="1.C2.B0_Passo:_Atualize_o_manifesto_de_instala.C3.A7.C3.A3o">Passo 1: Atualizar o manifesto de instalação</h3>
<p>O primeiro passo -- e, para muitas das extensões, o único que será necessário -- é atualizar o arquivo <a href="/pt/install.rdf" title="pt/install.rdf">manifesto de instalação</a>, <code>install.rdf</code>, para indicar compatibilidade com o Firefox 3.</p>
<p>Simplesmente ache a linha que indica a máxima versão compatível do Firefox (que, para o Firefox 2, pode indicar como aqui):</p>
<pre class="eval"> <span class="nowiki"><em:maxVersion>2.0.0.*</em:maxVersion></span>
</pre>
<p>Mude isto para indicar compatibilidade com o Firefox 3:</p>
<pre class="eval"> <span class="nowiki"><em:maxVersion>3.0.*</em:maxVersion></span>
</pre>
<p>Então reinstale sua extensão.</p>
<p>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.*".</p>
<div class="note"><strong>Nota:</strong> Note que neste ponto mais mudanças no Firefox 3 são esperadas. Estas mudanças podem quebrar algumas extensões, então você não precisa lançar sua extensão com <code>3.0.*</code> <code>maxVersion</code> 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 <code>3.0b5</code> como sua <code>maxVersion</code>.</div>
<p>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.</p>
<div class="note"><strong>Nota:</strong> Se a sua extensão ainda usa um script <code><a href="/en/Install.js">Install.js</a></code> ao invés de um <a href="/pt/install.rdf" title="pt/install.rdf">manifesto de instalação</a>, você precisa fazer a transição para um manifesto de instalação agora. O Firefox 3 não mais suporta os scripts <code>install.js</code> em arquivos XPI.</div>
<h4 id="Adicionando_localiza.C3.A7.C3.B5es_para_o_manifesto_de_instala.C3.A7.C3.A3o" name="Adicionando_localiza.C3.A7.C3.B5es_para_o_manifesto_de_instala.C3.A7.C3.A3o">Adicionando localizações para o manifesto de instalação</h4>
<p>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 <a href="/pt/Localizar_descrições_de_extensões" title="pt/Localizar_descrições_de_extensões">Localizar descrições de extensões</a> para mais detalhes.</p>
<h3 id="2.C2.B0_Passo_Assegure-se_de_estar_oferecendo_atualiza.C3.A7.C3.B5es_seguras" name="2.C2.B0_Passo:_Assegure-se_de_estar_oferecendo_atualiza.C3.A7.C3.B5es_seguras">Passo 2: Certificar-se de que está a proporcionar atualizações seguras</h3>
<p>Se você está hospedando complementos por si mesmo e não em um provedor de hospedagem de complementos seguro como <a class="link-https" href="https://addons.mozilla.org">addons.mozilla.org</a> 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 <a href="/en/Extension_Versioning,_Update_and_Compatibility#Securing Updates">Securing Updates</a> para mais informações.</p>
<h3 id="3.C2.B0_Passo_Lidar_com_APIs_mudadas" name="3.C2.B0_Passo:_Lidar_com_APIs_mudadas">Passo 3: Lidar com APIs alteradas</h3>
<p>Várias APIs foram alterados de maneira significativa. O mais significativo destes, que provavelmente afetará um grande número de extensões, são:</p>
<h4 id="DOM" name="DOM">DOM</h4>
<p>Nodes from external documents should be cloned using <a class="new" href="/pt-PT/docs/Web/API/Document/importNode" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>document.importNode()</code></a> (or adopted using <a class="new" href="/pt-PT/docs/Web/API/Document/adoptNode" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>document.adoptNode()</code></a>) before they
can be inserted into the current document. For more on the <a class="new" href="/pt-PT/docs/Web/API/Node/ownerDocument" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>Node.ownerDocument</code></a> issues, see the
<a class="external" href="http://www.w3.org/DOM/faq.html#ownerdoc" rel="noopener">W3C DOM FAQ</a>.</p>
<p>Firefox doesn't currently enforce this rule (it did for a while during the development of Firefox 3, but too many
sites break when this rule is enforced). We encourage Web developers to fix their code to follow this rule for
improved future compatibility.</p>
<h4 id="Favoritos__Hist.C3.B3rico" name="Favoritos_&_Hist.C3.B3rico">Marcadores & Histórico</h4>
<p>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 <a href="/en/Places">en:Places</a>. Veja <a href="/en/Places/Migration_Guide">Migration Guide for Places</a> para detalhes na atualização da sua extensão existente para usar a API Places.</p>
<h4 id="Gerenciador_de_Downloads" name="Gerenciador_de_Downloads">Gestor de Descargas</h4>
<p>A API do Gestor de Descargas foi alterado ligeiramente devido à transição de um RDF para armazenar dados usando a API <a href="/en/Storage">en:Storage</a>. 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 <em>receptores</em> no gestor de descargas. Consulte <a href="/en/nsIDownloadManager">en:nsIDownloadManager</a>, <a href="/en/nsIDownloadProgressListener">en:nsIDownloadProgressListener</a>, e <a href="/en/Monitoring_downloads">en:Monitoring downloads</a> para mais informação.</p>
<h4 id="Gerenciador_de_Senhas" name="Gerenciador_de_Senhas">Gestor de Palavras-passe</h4>
<p>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.</p>
<ul>
<li>O artigo <a href="/en/Using_nsILoginManager">en:Using nsILoginManager</a> 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.</li>
<li><code><a href="/en/nsILoginInfo">en:nsILoginInfo</a></code></li>
<li><code><a href="/en/nsILoginManager">en:nsILoginManager</a></code></li>
</ul>
<p>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.</p>
<h4 id="Popups_.28Menus.2C_Menus_de_Contexto.2C_Dicas_e_Pain.C3.A9is.29" name="Popups_.28Menus.2C_Menus_de_Contexto.2C_Dicas_e_Pain.C3.A9is.29">janelas (Menus, Menus de Contexto, Dicas de Ferramenta e Painéis)</h4>
<p>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 sobre como <a href="/en/XUL/PopupGuide">usar Popups</a> foi criado, detalhando como o sistema trabalha. Uma coisa a se notar é que <code>popup.<span id="m-showPopup"><code><a href="https://developer.mozilla.org/pt-PT/docs/Mozilla/Tech/XUL/Method/showPopup">showPopup</a></code></span></code> foi depreciado em favor do novo <code>popup.<span id="m-openPopup"><code><a href="https://developer.mozilla.org/pt-PT/docs/Mozilla/Tech/XUL/Method/openPopup">openPopup</a></code></span></code> e <code>popup.<span id="m-openPopupAtScreen"><code><a href="https://developer.mozilla.org/pt-PT/docs/Mozilla/Tech/XUL/Method/openPopupAtScreen">openPopupAtScreen</a></code></span></code>.</p>
<h4 id="Autocompletar" name="Autocompletar">Auto Completar</h4>
<p>O método <code><a href="/en/nsIAutoCompleteController#handleEnter()">handleEnter()</a></code> da interface <a href="/en/nsIAutoCompleteController">en:nsIAutoCompleteController</a> foi alterado 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.</p>
<h4 id="DOMParser" name="DOMParser">DOMParser</h4>
<ul>
<li>Quando um <code>DOMParser</code> é instanciado, este herda o código principal dito e os <code>documentURI</code> e <code>baseURI</code> da janela de onde o construtor vier.</li>
<li>Se o chamador tiver privilégios UniversalXPConnect, ele pode passar parâmetros para <code> new DOMParser()</code>. Se menos de três parâmetros forem passados, os parâmetros restantes serão padronizados para <code>null</code>.
<ul>
<li>O primeiro parâmetro é o principal para uso; ele sobrepõe o padrão principal normalmente herdado.</li>
<li>O segundo parâmetro é o <code>documentURI</code> para uso.</li>
<li>O terceiro parâmetro é o <code>baseURI</code> para uso.</li>
</ul>
</li>
<li>Se inicializa um <code>DOMParser</code> usando um contrato, somente através de uma chamada <code>createInstance()</code>, e não fizer a chamada do método <code>init()</code> do <code>DOMParser</code>, tentando iniciar a operação de análise será criada automaticamente a inicialização de <code>DOMParser</code> com um nulo principal e apontadores <code>null</code> para <code>DocumentURI</code> e <code>baseURI</code>.</li>
</ul>
<h4 id="Interfaces_removidas" name="Interfaces_removidas">Interfaces removidas</h4>
<p>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:</p>
<ul>
<li><code>nsIDOMPaintListener</code></li>
<li><code>nsIDOMScrollListener</code></li>
<li><code>nsIDOMMutationListener</code></li>
<li><code>nsIDOMPageTransitionListener</code></li>
<li><code>nsICloseAllWindows</code> (see <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=386200" title='FIXED: SeaMonkey only: no "view cert button" in untrusted cert error dialog'>bug 386200</a>)</li>
</ul>
<h3 id="4.C2.B0_Passo_Cheque_por_mudan.C3.A7as_relevantes_no_chrome" name="4.C2.B0_Passo:_Cheque_por_mudan.C3.A7as_relevantes_no_chrome">Passo 4: Procurar por alterações relevantes no chrome</h3>
<p>Houveram menores mudanças no chrome que podem requisitar mudanças no seu código. Uma nova <code>vbox</code> 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.</p>
<p>Por exemplo, se você anteriormente sobrepôs algum chrome antes da barra de estado, como isto:</p>
<pre><window id="main-window">
<something insertbefore="status-bar" />
</window>
</pre>
<p>Você deve agora sobrepor desta maneira:</p>
<pre><vbox id="browser-bottombox">
<something insertbefore="status-bar" />
</vbox>
</pre>
<h3 id="Outras_mudan.C3.A7as" name="Outras_mudan.C3.A7as">Outras alterações</h3>
<p><em>Mudanças simples adicionais que tiver de fazer enquanto atualiza sua extensão para trabalhar com o Firefox 3, aqui.</em></p>
<ul>
<li><code><a class="external" rel="freelink">chrome://browser/base/utilityOverlay.js</a></code> não é mais suportada por razões de segurança. Se você previamente utilizava-a, você pode mudar para <code><a class="external" rel="freelink">chrome://browser/content/utilityOverlay.js</a></code>.</li>
<li><a href="/en/nsIAboutModule">en:nsIAboutModule</a> implementações são agora requeridas para suportar o método <code>getURIFlags</code>. Veja <a href="https://dxr.mozilla.org/mozilla-central/source/netwerk/protocol/about/public/nsIAboutModule.idl" rel="custom">nsIAboutModule.idl</a> para documentação. Isto afeta extensões que provém novas URIs <code>about:</code>. (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=337746" title='FIXED: [FIX]Move "safe about" hardcoding out of security manager'>bug 337746</a>)</li>
<li>O elemento <code><tabbrowser></code> não é mais parte do "kit de ferramentas" (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=339964" title="FIXED: move tabbrowser.xml out of mozilla/toolkit and into mozilla/browser">bug 339964</a>). 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).</li>
<li>Mudanças em <a href="/en/nsISupports_proxies">en:nsISupports proxies</a> e possivelmente relacionado ao encadeamento de interfaces que precisam ser documentadas.</li>
<li>Se você usa instruções de processamento XML, como <code><?xml-stylesheet ?></code> em seus arquivos XUL, fique atento às mudanças feitas em <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=319654" title="FIXED: Processing instructions in XUL are not added to the content model">bug 319654</a>:
<ol>
<li>XML PIs foram agora adicionadas a um documento XML DOM. Isto significa que <a href="/pt-PT/docs/Web/API/Document/firstChild" title="The documentation about this has not yet been written; please consider contributing!"><code>Document.firstChild</code></a> não é mais garantida como o elemento raiz. Se você precisa pegar o documento raiz no seu script, use <a href="/pt-PT/docs/Web/API/Document/documentElement" title="The documentation about this has not yet been written; please consider contributing!"><code>Document.documentElement</code></a> ao invés.</li>
<li>as instruções de processamento <code><?xml-stylesheet ?></code> e <code><?xul-overlay ?></code> agora não tem efeito fora do documento prolog.</li>
</ol>
</li>
<li><code>window.addEventListener("load", myFunc, true)</code> não é mais ativado no carregamento de conteúdo web (carregamento de páginas no navegador). Isto foi devido ao <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=296639" title="FIXED: Split windows into an inner and outer object">bug 296639</a> que altera a maneira como as janelas internas e externas se comunicam. O simples conserto é para o uso de <code>gBrowser.addEventListener("load", myFunc, true)</code> como descrito <a href="/en/Code_snippets:Tabbed_browser#Detecting page load">aqui</a> e trabalha no Firefox 2 muito bem.</li>
<li><code>content.window.getSelection()</code> dá um objeto (que pode ser convertido para uma string por <code>toString()</code>) diferentemente do agora depreciado <code>content.document.getSelection()</code> que retorna uma string</li>
<li><code>event.preventBubble()</code> foi depreciado no Firefox 2 e foi removido no Firefox 3. Use <a href="/en/DOM/event.stopPropagation">event.stopPropagation()</a>, que funciona bem no Firefox 2.</li>
<li>Contadores que são inciados usando <code>setTimeout()</code> estão agora bloquados por janelas modais devido à correção para <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=52209" title="FIXED: JS timers can fire while a modal dialog is open">bug 52209</a>. Você pode usar <code>nsITimer</code> no lugar.</li>
</ul>
<p><span class="comment">Categorias</span></p>
<p><span class="comment">Interwiki Language Links</span></p>
|