Esboço
Esta página está incompleta.
O Firefox 4, o qual entrou em beta no mês de junho de 2010, melhora a performance, adiciona maior suporte ao HTML5 e outras tecnologias web envolvidas e, além disso, melhora a segurança. Este artigo proporciona informações iniciais sobre o lançamento que virá e quais funcionalidades estão disponíveis, tanto para desenvolvedores web, quanto para desenvolvedores de complementos e desenvolvedores da plataforma Gecko.
Muitas destas funcionalidades já podem ser testadas na versão Firefox 4 beta, ou, se estiver se sentindo aventureiro, em nightly trunk builds.
Funcionalidades para desenvolvedores web
O Gecko agora usa o analisador HTML5 (parser HTML5), que corrige bugs, melhora a interoperabilidade e melhora a performance. Ele também permite conteúdos de SVG e MathML embutidos diretamente na marcação HTML.
HTML
- Conheça o parser HTML5
- Uma olhada no que o analisador HTML5 (parser HTML5) significa para você e como incorporar SVG e MathML ao seu conteúdo.
- Forms no HTML5
- Uma olhada às melhorias aos web forms no HTML5. Entre estas mudanças foram adicionados tipos de entrada no elemento
<input>
e validação de dados, dentre outros. - Seções HTML5
- O Gecko agora suporta os novos elementos HTML5 relacionados a seções em um um documento:
<article>
,<section>
,<nav>
,<aside>
,<hgroup>
,<header>
e<footer>
. - Outros elementos HTML5
- O Gecko agora suporta os seguintes elementos do HTML5:
<mark>
,<figure>
e<figcaption>
. - WebSockets
- Um guia para usar a nova API de WebSockets para comunicação em tempo real entre uma aplicação web e um servidor.
Modificações HTML diversas
- Os elementos
<textarea>
são agora redimensionáveis por padrão; você pode usar a propriedaderesize
do CSS para desabilitar isto. canvas.getContext
ecanvas.toDataURL
não adicionam mais exceções quando chamados com argumentos não reconhecidos.- O elemento
<canvas>
agora suporta o método específico da MozillamozGetAsFile()
, o qual permite a obtenção de um arquivo baseado na memória contendo uma imagem dos conteúdos do canvas. VejaHTMLCanvasElement
para detalhes. canvas2dcontext.globalCompositeOperation
,canvas2dcontext.lineCap
ecanvas2dcontext.lineJoin
não adicionam mais exceções quando configurados para valores desconhecidos.canvas2dcontext.globalCompositeOperation
não adiciona mais exceções quando configurado para um valor desconhecido e não suporta mais o valor não padrãodarker
.- Foi removido o suporte para o elemento obsoleto
<spacer>
, o qual não existe em nenhum outro navegador. - O elemento
<isindex>
, quandro criado pela chamada dedocument.createElement()
, é agora criado como um elemento simples sem propriedades ou métodos. - O Gecko agora suporte a chamada
click()
em elementos<input>
para abrir o seletor de arquivos. Veja o exemplo no artigo Using files from web applications. - Os elementos
<script>
internos aos elementos<iframe>
,<noembed>
e<noframes>
agora são executados, ao contrário de versões anteriores do Firefox. Isto está de acordo com a especificação e corresponde com o comportamento de outros navegadores.
CSS
- Transições CSS (CSS transitions)
- O suporte à novas transições CSS está disponível no Firefox 4.
- Valores calculados em CSS
- Foi adicionado o suporte para
-moz-calc
. Isto permite especificar valores<length>
como expressões matemáticas. - Seletor de agrupamento
- Suporte a
:-moz-any
para agrupar seletores e fatorizar combinadores. - Suporte a sub-retângulo em imagens de fundo
- A função
-moz-image-rect
torna possível o uso de subretângulos de imagens como umabackground-image
(imagem de plano de fundo). - Propriedades de toque CSS
- O suporte para propriedades de toque foi adicionado. Detalhes e nomes de artigos reais, virão depois.
- Using arbitrary elements as CSS backgrounds
- Você pode usar a função
-moz-element
do CSS e a funçãodocument.mozSetImageElement()
do DOM para usar elementos HTML arbitrários como planos de fundos. - Privacidade e o seletor :visited
- Mudanças foram feitas ao tipo de informação que pode ser obtida sobre o estilo dos links visitados usando seletores CSS. Isto pode afetas algumas aplicações web.
Novas propriedades do CSS
Propriedade | Descrição |
-moz-font-feature-settings |
Permite características avançadas de customização em fontes OpenType. |
-moz-tab-size |
Especifica a largura em caracteres de espaço, de um caracter tab (U+0009) na renderização de texto. |
resize |
Permite o controle das dimensões nas quais um elemento pode ser redimensionado. |
Novas pseudo-classes do CSS
Pseudo-classe | Descrição |
:-moz-handler-crashed |
Usado para estilizar elementos cujos plugins tenham quebrado. |
:-moz-placeholder |
Aplicado ao espaço reservado de texto nos campos de formulário. |
:-moz-submit-invalid |
Aplicado ao botão de submeter em formulários quando um ou mais dos campos do formulário não é validado. |
:-moz-window-inactive |
Aplicado a elementos em janelas inativas. |
:invalid |
Aplicado automaticamente para os campos <input> quando suas constantes são inválidas. |
:optional |
Aplicado automaticamente para os campos <input> que não especifiquem o atributo required . |
:required |
Aplicado automaticamente para os campos <input> que especifiquem o atributo required . |
:valid |
Aplicado automaticamente para os campos <input> quando suas constantes são validadas com sucesso. |
Novos pseudo-seletores do CSS
Pseudo-seletor | Descrição |
:-moz-focusring |
Permite especificar a aparência de um elemento quando o Gecko acredita que ele deve ter uma indicação de foco renderizada. |
Novas funções do CSS
Função | Descrição |
:-moz-any |
Permite agrupar seletores e fatorizar combinações. |
-moz-calc |
Permite a especificação de valores <length> como expressões matemáticas. |
-moz-element |
Permite o uso de um elemento arbitrário como imagem de fundo para background-image e background . |
-moz-image-rect |
Permite o uso de um sub-retângulo de uma imagem como um background-image ou background . |
Propriedades do CSS renomeadas
Old Name | New Name | Notes |
-moz-background-size |
background-size |
O nome -moz-background-size não é mais suportado. |
-moz-border-radius |
border-radius |
O antigo nome é suportado por tempo limitado para permitir a atualização de seus sites. Mudanças de renderização também foram feitas para conseguir a compatibilidade com a última versão. |
-moz-box-shadow |
box-shadow |
Modificações CSS diversas
- A propriedade
text-shadow
agora permite raio de desfoque de até 300px, por razões de sanidade e performance. - A propriedade
overflow
não se aplica mais para elementos do grupo "table" (<thead>
,<tbody>
e<tfoot>
). - A propriedade
-moz-appearance
agora suporta o valor-moz-win-borderless-glass, que aplica uma aparência Aero Glass a um elemento.
- A funcionalidade de mídia
-moz-device-pixel-ratio
foi adicionada, permitindo o uso de pixels do dispositivo pela taxa de pixels CSS a ser usada em Consultas de Mídia. - A maneira com que o Gecko lida com o CSS units foi revisada para melhorar a compatibilidade com outros navegadores e para traduzir comprimentos absolutos mais acuradamente na contagem de pixels da tela baseado na DPI do dispositivo.
Modificações CSS diversas
-moz-border-radius
foi renomeado paraborder-radius
.-moz-border-radius
é suportado como um apelido para um período de transição- A manipulação de valores percentuais foi alterada para ficar compatível com a última especificação
- Cantos arredondados agora arredondam também conteúdo e imagens (a menos que seja especificado
overflow
:visible
)
- A propriedade
-moz-box-shadow
foi renomeada parabox-shadow
. - A propriedade
text-shadow
agora permite raio de desfoque de até 300px, por razões de sanidade e performance. - A pseudoclasse
:-moz-window-inactive
foi implementada. - A propriedade
-moz-tab-size
permite a especificação da largura de um caracter de tab (U+0009) em caracteres de espaço, quando na renderização de texto. - A propriedade
resize
do CSS3 foi implementada. - A propriedade
-moz-background-size
foi renomeada para seu nome finalbackground-size
;-moz-background-size
não é mais suportada. - A propriedade
overflow
não se aplica mais para elementos do grupo "table" (<thead>
,<tbody>
e<tfoot>
). - O pseudoseletor
:-moz-focusring
permite a especificação da aparência de um elemento quando o Gecko acredita que o elemento deve ter uma indicação de foco renderizada. - A função
-moz-element
do CSS permite o uso de um elemento arbitrário como imagem de fundo parabackground-image
ebackground
. - A propriedade
-moz-appearance
agora suporta o valor-moz-win-borderless-glass, que aplica uma aparência Aero Glass a um elemento.
- As pseudoclasses
:valid
e:invalid
são agora automaticamente aplicadas para campos de validação<input>
. - A pseudoclasse
:-moz-submit-invalid
é aplicada ao botão de submeter em campos de formulários quando um ou mais campos não são validados. - A pseudoclasse
:required
é agora automaticamente aplicada aos campos<input>
que especificam o atributo requerido; a pseudoclasse:optional
é aplicada a todos os outros campos. - A pseudoclasse
:-moz-placeholder
foi adicionada para permitir a estilização de campos de texto em formulários. - A pseudoclasse
:-moz-handler-crashed
foi adicionada; ela estiliza elementos cujos plugins tenham quebrado. - A funcionalidade de mídia
-moz-device-pixel-ratio
foi adicionada, permitindo o uso de pixels do dispositivo pela taxa de pixels CSS a ser usada em Consultas de Mídia. - A nova propriedade
-moz-font-feature-settings
permite que você customize características avançadas das fontes, de fontes OpenType. - A maneira com que o Gecko lida com o CSS units foi revisada para melhorar a compatibilidade com outros navegadores e para traduzir comprimentos absolutos mais acuradamente na contagem de pixels da tela baseado na DPI do dispositivo.
Gráficos e vídeo
- WebGL
- O padrão de desenvolvimento WebGL é agora suportado pelo Firefox.
- Otimização da performance gráfica
- Dicas e truques para conseguir a melhor performance gráfica e de vídeo no Firefox 4.
- Suporte a vídeos WebM
- O novo formato aberto de vídeo WebM é suportado pelo Gecko 2.0; o suporte está incluído em nightlies desde 9 de junho.
- Animação SVG com SMIL
- O suporte a animações SMIL do SVG está agora disponível.
- Usando SVG como imagens e como fundos de tela CSS
- Você pode agora usar o SVG com o elemento
<img>
, assim como com a propriedadebackground-image
do CSS. - Suporte ao atributo de mídia
buffered
- O atributo
buffered
nos elementos<video>
e<audio>
é agora suportado, permitindo a determinação de quais faixas de um arquivo de mídia foram carregadas. A interfaceTimeRanges
do DOM foi implementada para suportar isto. - Atributo de mídia
preload
- O atributo
preload
da especificação do HTML5 foi implementado, substituindo o atributo anteriormente implementado (e não mais suportado)autobuffer
. Isto afeta os elementos<video>
e<audio>
, assim como a interfacensIDOMHTMLMediaElement
. - Melhoramentos no posicionamento de texto SVG
- Agora é possível especificar listas para os valores das propriedades
x
,y
,dx
edy
nos elementos<text>
e<tspan>
do SVG. Isto permite controlar o posicionamento de cada caractere individualmente em uma string.
DOM
- Arrays com tipos JavaScript
- Foi adicionado suporte para os arrays com tipos JavaScript; eles permitem a manipulação de buffers contendo dados em raw usando tipos de dados nativos. Muitas API fazem uso disto, incluindo File API, WebGL, e WebSockets.
- Obtenção de limites de retângulos para ranges
- O objeto
Range
agora possui os métodosrange.getClientRects()
erange.getBoundingClientRect()
. - Captura de eventos de mouse em elementos arbitrários
- O suporte para as APIs
setCapture()
ereleaseCapture()
originadas do Internet Explorer foram adicionadas. Veja bug 503943. - Manipulação do histórico do navegador
- O objeto de histórico de documento existente, disponível através do objeto
window.history
agora suporta os novos métodospushState()
ereplaceState()
do HTML5. - Animações usando o MozBeforePaint
- Um novo evento foi adicionado, o qual combinado com o método
window.mozRequestAnimationFrame()
e a propriedadewindow.mozAnimationStartTime
, proporciona uma maneira de criar animações sincronizadas uma com a outra. - Eventos de toque e multi-toque
- Foi adicionado suporte ao evetos de toque e multi-toque.
A interface DOM dos elementos HTML mudou
Muitos elementos do HTML tiveram suas interfaces DOM mudadas para aquelas requisitadas pela especificação do HTML5, como mostrado abaixo.
Interface no Firefox 3.6 | Interface no Firefox 4 | Elemento HTML |
HTMLSpanElement |
HTMLElement |
<abbr> , <acronym> , <address> , <b> , <bdo> , <big> , <blink> , <center> , <cite> , <code> , <dd> , <dfn> , <dt> , <em> , <i> , <kbd> , <listing> , <nobr> , <plaintext> , <s> , <samp> , <small> , <strike> , <strong> , <sub> , <sup> , , <tt> , <u> , <var> , <xmp> |
HTMLDivElement |
HTMLElement |
<noembed> , <noframes> , <noscript> |
HTMLWBRElement |
HTMLElement |
<wbr> |
Modificações DOM diversas
- O "envoltório" de um elemento
<textarea>
agora pode ser controlado a partir do DOM, através do atributowrap
do DOM. bug 41464 - Elementos
<script>
criados usandodocument.createElement
e inseridos em um documento agora comportam-se de acordo com a especificação do HTML5 por padrão. Scripts com o atributosrc
são executados assim que possível (sem manter o ordenamento) enquanto scripts sem o atributosrc
são executados sincronamente. Para fazer com que scripts inseridos com o atributosrc
sejam executados na ordem de inserção, configure-os com.async=false
. - Os objetos
file
do DOM agora oferecem a propriedadeurl
. - Suporte para FormData para XMLHttpRequest.
- A propriedade
element.isContentEditable
foi implementada. - A propriedade
document.currentScript
permite determinar qual elemento<script>
do script está sendo executado no momento. O novos eventosdocument.onbeforescriptexecute
edocument.onafterscriptexecute
são lançados antes e depois de um elemento script ser executado. - Adicionada a propriedade
mozSourceNode
ao objetoDragTransfer
. - Adicionado o método
selection.modify()
ao objetoSelection
; ele permite a fácil alteração da seleção de texto atual ou da posição do cursor em uma janela do navegador. - O suporte para o objeto
window.directories
e para a característicadirectories
dewindow.open
, qua não são suportadas em nenhum outro navegador, foi removido. Ao invés dela, usepersonalbar
. bug 474058 - A propriedade
event.mozInputSource
foi adicionada aos eventos de interface de usuário do DOM; esta propriedade não-padrão permite a determinação do tipo de dispositivo que gerou um evento. - O evento
document.onreadystatechange
foi implementado. - O método
document.createElement
não aceita mais a tag nome entre<
e>
no modo quirk. - Os métodos
element.setCapture()
edocument.releaseCapture()
foram adicionados, permitindo aos elementos continuar a monitorar os eventos do mouse, mesmo quando o mouse está fora da área normal de monitoramento após a ocorrência de um eventomousedown
. - A propriedade
window.mozPaintCount
foi adicionada; ela permite a determinação de quantas vezes um documento foi pintado. Isto pode ser útil no teste de performance de suas aplicações web. - O token de língua foi removido de
window.navigator.appVersion
ewindow.navigator.userAgent
. Ao invés deles, use owindow.navigator.language
ou o Accept-Language header. bug 572656 - O objeto XMLHttpRequest agora expõe a resposta como um array digitado em JavaScript, assim como uma string, usando a propriedade
mozResponseArrayBuffer
específica do Gecko. - Eventos de mouse agora incluem uma propriedade
mozPressure
indicando a quantidade de pressão em dispositivos de entrada sensíveis a pressão, suportados. - Os métodos
window.URL.createObjectURL()
ewindow.URL.revokeObjectURL()
permitem a criação de objetos URL que referenciem arquivos locais. - O método
DOMImplementation.createHTMLDocument()
permite a criação de novos documentos HTML. Node.mozMatchesSelector()
agora lança uma exceçãoSYNTAX_ERR
se o seletor de string selecionado for inválido, ao invés de, incorretamente, retornarfalse
.- Agora é possível selecionar valores de propriedades em um elemento SVG usando a mesma sintaxe econômica do CSS. Por exemplo:
element.style.fill = 'lime'
. Vejaelement.style
para detalhes. - A raiz do documento agora possui um atributo
privatebrowsingmode
que descreve o estado do modo de navegação privada, incluindo uma indicação se a navegação privada é temporária ou permanente para a sessão. - Agora o segundo parâmetro do método
window.getComputedStyle()
é opcional, assim como em qualquer outro navegador grande. - Agora o objeto
StorageEvent
do DOM está de acordo com a última versão da especificação. - O atraso mínimo permitido para o método
window.setTimeout()
é agora uma preferência,dom.min_timeout_value
. - O evento
MozAfterPaint
não é mais enviado por padrão, devido uma potencial questão de segurança. Ele pode ser reabilitado configurando a preferência.
Segurança
- Política de Segurança de Conteúdo (CSP)
- A Política de Segurança de Conteúdo (Content Security Policy - CSP) é uma proposta da Mozilla desenvolvida para ajudar web designers e administradores de servidores a especificar como o conteúdo em seus sites interage. A meta é ajudar a detectar e abrandar ataques, incluindo cross-site scripting e ataques de injeção de dados.
- Segurança de Transporte do HTTP Estrito (HTTP Strict Transport Security)
- A Segurança de Transporte de HTTP Estrito é uma característica que permite a um website dizer ao navegador que ele deve ser comunicado somente usando HTTPS, ao invés de HTTP.
- O cabeçalho de resposta (The X-FRAME-OPTIONS response header)
- O cabeçalho de resposta HTTP, X-FRAME-OPTIONS, introduzido no Internet Explorer 8 é agora suportado pelo Firefox. Isto permite a sites indicar quando suas páginas devem ou não ser usadas em quadros (frames), e, em caso afirmativo, se deve ou não restringir isto à mesma origem.
- Mudanças na string de Agente de Usuário (User Agent string) changes
- Como um meio para reduzir a quantidade de dados e entropia descartada em requisições HTTP (veja bug 572650) a força da criptografia e tokens de linguagem foram removidos pela string do agente de usuário.
JavaScript
Para uma visão geral das mudanças implementadas em JavaScript 1.8.5, veja Novidades no JavaScript 1.8.5. O JavaScript no Firefox 4 terá aderência adicional ao padrão ECMAScript 5.
Ferramentas para desenvolvedores
- Usando o Web Console
- A ferramenta Web Console é um depurador útil para ajudar desenvolvedores web, assim como, desenvolvedores de extensões.
O Console de Erros está inicialmente desabilitado por padrão no Firefox 4. Você pode reabilitá-lo mudando a preferência devtools.errorconsole.enabled
para true
e reiniciando seu navegador.
Mudanças para desenvolvedores Mozilla e de complementos
Para dicas úteis sobre a atualização de extensões existentes para o Firefox 4, veja Atualizando extensões para o Firefox 4. Existem muitas mudanças de chaves que quebram a compatibilidade com complementos existentes, então certifique-se de ler este artigo.
Se você é um desenvolvedor de temas, você deve ler Mudanças nos temas do Firefox 4 (en) para entender algumas mudanças críticas, às quais é necessário estar ciente.
Módulos de codificação JavaScript
- Services.jsm
- O módulo de código
Services.jsm
fornece "getters" que tornam mais fácil a obtenção de referências a serviços comumente usados, como o serviço de preferências ou o mediador de janelas, entre outros.
- JS-ctypes API
- A API JS-ctypes torna possível chamar funções de fora da biblioteca compatível com C, sem precisar usar o XPCOM.
- Gerenciador de Complementos
- O Gerenciador de Complementos fornece informações sobre complementos instalados, suporte à gerência dos mesmos e fornece maneiras para instalar e remover complementos.
- PopupNotifications.jsm
- O novo módulo de notificações popup torna fácil apresentar notificações atrativas, não modais para o usuário. Você pode ver como usar esta API em Usando notificações de popup (en).
- Carregando módulos de código a partir de URL chrome: (en)
- Você pode agora carregar módulos JavaScript usando URL chrome:, mesmo dentro de arquivos JAR.
- DownloadLastDir.jsm
- O módulo de código
DownloadLastDir.jsm
fornece a variável global, a qual contém uma string que pode ser usada para aprender o caminho do diretório no qual ocorreu o último download. Este módulo lida com questões relacionadas a privacidade de navegação do usuário. - Medindo a performance usando o módulo de código PerfMeasurement.jsm (en)
- O módulo de código
PerfMeasurement.jsm
proporciona uma API para mensurar a performance dos dados a nível de CPU no código JavaScript.
Mudanças diversas aos módulos de código
- O módulo de código
NetUtil.jsm
agora oferece o métodoreadInputStreamToString()
, o qual permite a leitura de bytes arbitrários de uma "stream" em uma string, mesmo se a "stream" incluir zeros. - Você agora pode usar workers em módulos de código JavaScript (en).
Mudanças no DOM
ChromeWorker
- Um novo tipo de worker para código privilegiado; ele permite o uso de coisas como js-ctypes de workers em extensões e código de aplicações.
- Eventos de toque
- Suporte para eventos de toque (não padrões) foi adicionado; isto permite detectar o movimento de múltiplos dedos movendo-se em uma tela ao mesmo tempo.
XUL
Mudanças no elemento tabbrowser
Várias mudanças foram feitas ao elemento tabbrowser
que causam impactos nas extensões que interagem com as abas. Adicionalmente para suportar abas aplicativos, estas mudanças também mudam a barra de abas para uma barra de ferramentas padrão, a qual permite que o usário arraste botões da barra de ferramentas para ela.
- Os eventos de
TabClose
,TabSelect
eTabOpen
(fechar aba, selecionar aba e abrir aba) não levam mais ao elementotabbrowser
(gBrowser
). Eventos listeners (ouvintes) para estes eventos devem ser adicionados aogBrowser.tabContainer
ao invés de diretamente aogBrowser
. - O menu de contexto das abas não mais um filho anônimo do
tabbrowser
. Ele pode portanto ser sobreposto diretamente com XUL overlays. Ele também pode ser acessado mais diretamente com JavaScript viagBrowser.tabContextMenu
. Veja esta postagem no blog (en) para mais detalhes. - A nova propriedade
visibleTabs
foi adicionada para permitir pegar um array das abas visíveis correntemente; isto permite determinar quais abas estão visíveis no conjuto de abas atual. Isto é usado pelo Firefox Panorama, por exemplo. - Adicionado o novo método
showOnlyTheseTabs
; isto é usado pelo Firefox Panorama. - Adicionado o novo método
getIcon
, o qual permite pegar o favicon de uma aba sem ter chamar o elementobrowser
. - Adicionada a nova propriedade
tabbrowser.tabs
, a qual permite facilmente pegar uma lista das abas em um elementotabbrowser
. - Os novos métodos
pinTab
eunpinTab
permitem que você prenda e desprenda abas (isto é, trocá-las entre serem abas de app ou abas normais).
Mudanças para popups
- Agora o elemento
menupopup
do XUL possui a propriedadetriggerNode
, a qual indica o nó no qual o evento ocorreu, que causou a abertura do popup. Isto também requisitou a adição de um parâmetro de evento de disparo para o métodoopenPopup
. Além disso, foi adicionada a propriedadeanchorNode
; ela retorna a âncora especificada quando o popup foi criado. - O elemento
panel
agora oferece os atributosfade
eflip
, os quais são usados para configurar o comportamento do novo estilo "arrow" de notificação de painéis.
Suporte remoto ao XUL removido
XUL remoto não é mais suportado; isto afeta os documentos XUL servidos através de HTTP; além disso, não é mais possível carregar documentos XUL usando URLs file://
a menos que você configure a preferência dom.allowXULXBL_for_file
para true
. Há, entretanto, um recurso de whitelist que pode ser usado para permitir domínios específicos a carregarem o XUL remotamente. O Remote XUL Manager extension permite o gerenciamento desta whitelist.
Mudanças diversas no XUL
- O atributo
readonly
agora funciona corretamente para campos. - O elemento
resizer
agora permite o uso do atributoelement
para especificar um elemento a ser redimencionado, ao invés de redimencionar a janela. - O elemtno
resizer
possui agora um atributotype
que permite especificar que o redimencionador é para uma janela ao invés de um elemento, para prevenir o redimencionador da janela de ser dobrado. - O atributo "active" não é mais configurado como ativo em janelas XUL. Ao invés disso, você pode usar a nova pseudoclasse
:-moz-window-inactive
para definir diferentes estilos para as os fundos das janelas. - O atributo
emptytext
está agora obsoleto; ao invés dele, você deve usar oplaceholder
. - O elemento
popup
não é mais suportado; ao invés dele, você deve usar omenupopup
. - O elemento
window
agora oferece um atributoaccelerated
; quando verdadeiro, é permitido ao gerenciador de camadas por hardware, acelerar a janela. - O elemento
stack
agora suporta os atributoslbottom
eright
. - Os eventos agora são lançados durante a customização da
toolbox
, permitindo a detecção de mudanças nas barras de ferramentas (en). - O atributo
alternatingbackground
para elementostree
não é mais suportado; ao invés dele, você pode usar a pseudoclasse:-moz-tree-row
. - O botão de exibição da barra de ferramentas dos favoritos com anonid chevronPopup não é mais anônimo; ele possui um ID de "PlacesChevron".
- O elemento
tabs
agora possui a propriedadetabbox
, substituindo a antiga propriedade_tabbox
, a qual está obsoleta (e nunca foi documentada). - Elementos XUL
window
agora possuem o atributodrawintitlebar
; se ele fortrue
, a área de conteúdo da janela inclui a barra de títulos, permitindo desenhar na barra de títulos. - Os novos elementos
TabPinned
eTabUnpinned
estão disponíveis, permitindo que você detecte quando abas são prendidas e desprendidas (en). - O novo evento
TabAttrModified
é enviado quando os atributoslabel
,crop
,busy
,image
ouselected
das abas são modificados. - Os elementos
tab
agora possuem um atributopinned
, permitindo que você determine quando uma aba está ou não correntemente presa. - A classe
setDirectionIndicator
em elementostree
não fez nada por algum tempo; agora ela não é mais usada. - O elemento
window
possui agora um atributochromemargin
que permite configurar margens entre o chrome e o conteúdo de cada lado da janela; isto pode ser usado para desenhar na barra de títulos, por exemplo. - O elemento
window
possui agora um atributodisablechrome
; ele é usado para esconder a maioria do chrome em uma janela quando ela está sendo usada para exibir a IU no navegador, como emabout:addons
. - O elemento
window
possui agora um atributodisablefastfind
, o qual permite desabilitar a barra de busca em uma janela quando o conteúdo não a suporta. Isto é usado, por exemplo, no painel de complementos. - Barras de ferramentas agora podem ser caixas de ferramentas externas, enquanto continuarem sendo consideradas membros da
toolbox
, configurando a propriedadetoolboxid
datoolbox
. Além disso, o elementotoolbox
agora possui uma propriedadeexternalToolbars
, a qual lista todas as barras de ferramentas consideradas membros da caixa de ferramentas. - Foi adicionado suporte a logging XUL templates para propósitos de depuração.
Mudanças na IU que afetam os desenvolvedores
- A barra de complementos
- O estado da barra foi removido em favor de uma nova barra de complementos. Será necessário atualizar sua extensão para usar isto se você já adicionou a IU à barra de estado no passado.
Armazenamento
Mudanças diversas na API storage (de armazenamento)
- A interface
mozIStorageBindingParamsArray
possui agora um atributo length (comprimento) que indica o número de objetosmozIStorageBindingParams
no array. - O
mozIStorageStatement.bindParameters()
agora retorna um erro se amozIStorageBindingParamsArray
especificada estiver vazia. - Adicionado o método
mozIStorageConnection.clone()
, o qual permite a clonagem de uma conexão de um banco de dados existente. - Adicionado o método
mozIStorageConnection.asyncClose()
, o qual permite fechar ua conexão assíncronamente; você especifica um callback para ser notificado quando a operação de fechamento estiver completa. - Adicionado o método
mozIStorageConnection.setGrowthIncrement()
, o qual permite a especificação da quantidade a qual o arquivo de banco de dados cresce com o tempo, para ajudar o SQLite a reduzir a fragmentação. - O erro
SQLITE_CONSTRAINT
é agora reportado comoNS_ERROR_STORAGE_CONSTRAINT
ao invés de comoNS_ERROR_FAILURE
.
XPCOM
Em adição à mudanças específicas referenciadas abaixo, é importante notar que não existem mais interfaces estáticas. Todas as interfaces são dinâmicas, independente do que a documentação pode dizer. Atualizaremos a documentação com o tempo.
- Mudanças no XPCOM no Gecko 2.0
- Detalhes sobre as mudanças para o XPCOM que causam algum impacto na compatibilidade do Firefox 4.
- Components.utils.getGlobalForObject()
- Este novo método retorna o objeto global com o qual um objeto é associado; ele substitui um caso de uso comum do agora removido
__parent__
.
Places
- Os resultados de consultas no Places podem agora ser vistos por múltiplos observadores eas consultas podem ser executadas assíncronamente. Isto significa que há algumas mudanças nas interfaces
nsINavHistoryResult
,nsINavHistoryQueryOptions
, ensINavHistoryContainerResultNode
. Mais significantemente, a interfacensINavHistoryResultViewer
foi renomeada paransINavHistoryResultObserver
. - Algumas novas notificações foram adicionadas para permitir que o navegador controle os processos de desligamento do serviço Places com mais segurança. Destas, a maioria é somente para uso interno, mas o conhecimento da notificação
places-connection-closed
está disponível quando o serviço Places completa seu processo de desligamento. - Agora o tamanho de saída do array em vários métodos do Places é opcional.
- Foi removido o suporte para
<menupopup type="places">
. Ao invés, é necessário criar e popular um menu com informações do Places manualmente, ao invés de ter isto feito para você. Veja Displaying Places information using views: Menu view para detalhes.
Mudanças na interface
- As interfaces
nsIDocShell
ensIWebBrowser
agora possuem um novo atributoisActive
, o qual é usado para permitir a otimização de caminhos de código para documentos que não estão visíveis correntemente. - O método
nsIMemory
densIMemory.isLowMemory()
isLowMemory foi considerado obsoleto. Ao invés disso, você deve usar notificações "memory-pressure" (en) para lidar com situações de pouca memória. - A API para lidar com redirecionamentos em canais HTTP mudou para permitir que sejam processados assincronamente, qualquer código implementado que lide com redirecionamento usando
nsIChannelEventSink.onChannelRedirect()
precisa ser atualizado para, ao invés disso, usarnsIChannelEventSink.asyncOnChannelRedirect()
. Isto aceita um manipulador de callbacks, que precisa er chamado quando um redirecionamento é completado com sucesso. - Foi adicionado o método
nsINavHistoryResultObserver.batching()
proporcionando uma maneira para agrupar as operações do Places em lotes, reduzindo o número de notificações de atualização enviadas, o que pode melhorar a performance quando observadores estão realizando tarefas (assim como recarregar visualizações). - A interface
nsIPref
, obsoleta durante algum tempo, finalmente foi removida. Se você já não mudou paransIPrefService
, agora é o momento. - As interfaces
nsISessionStore
ensISessionStartup
receberam mudanças para suportar a restauração das sessões, sob demanda. Veja o métodonsISessionStore.restoreLastSession()
. - Os métodos
nsIPrincipal.subsumes()
ensIPrincipal.checkMayLoad()
donsIPrincipal
, assim como seus atributosorigin
,csp
, eURI
, estão agora disponíveis através de scripts; anteriormente eles estavam disponíveis apenas através de códigos nativos.
Gerenciamento de memória
- Alocação de memória infalível
- A Mozilla, agora proporciona alocadores de memória infalíveis que são garantem que não haverá um retorno null. Você deve ler este artigo para aprender como eles trabalham e como solicitar explicitamente a alocação de memória falível versus invalível.
Outras mudanças
- A maioria dos recursos contidos no Firefox foi combinado em um único arquivo JAR,
omni.jar
, o qual melhora a performance na inicialização reduzindo I/O. Para detalhes, leia Sobre omni.jar (en). - A preferência
accessibility.disablecache
não é mais suportada; ela está exposta apenas para propósitos de depuração e não é mais usada. - Complementos cujas GUID mudam de uma versão para outra podem agora ser atualizados corretamente.
- Como um efeito colateral devido a remoção dos diretórios específicos para plataformas em pacotes de complementos, não é mais possível proporcional diferentes preferências padrão para cada plataforma.
Outras mudanças
- Somente o arquivo chrome.manifest raiz é carregado
- Agora somente o arquivo
chrome.manifest
raiz é carregado; se você necessitar de um arquivo de manifesto secundário para ser carregado, você pode usar o comandomanifest
no seuchrome.manifest
raiz para carregá-lo. - Removido o suporte ao Gopher
- O protocolo Gopher não é mais suportado nativamente. O suporte continuado está disponível pela extensão OverbiteFF.
- Processamento de eventos de manipulação de conteúdo
- Com o objetivo de suportar plugins fora do processo e outra características de multi processamento, uma nova API foi introduzida para suportar o envio de mensagens através de processos.
- Extensões Bootstrapped (en)
- Agora é possível criar extensões que podem ser instaladas, desinstaladas e atualizadas (ou desatualizadas) sem a necessidade de reiniciar o navegador.
- Plugin padrão removido
- O plugin padrão foi removido. A pasta de aplicações plugin também foi removida por padrão, entretanto o suporte para a instalação de plugins através desta pasta ainda existe. Veja bug 533891.
- Gerenciador de Extensões substituido pelo Gerenciador de Complementos
- O
nsIExtensionManager
foi substituido pelo Gerenciador de Complementos (en). - Os filhos HWND não são mais usados
- O Firefox não cria mais filhos HWND para seu uso interno no Windows. Se você escreveu uma extensão que usa código nativo para manipular estas HWND, a sua extensão não funcionará no Firefox 4. Você precisará ou parar de usar HWND ou empacotar seu código dependente de HWND em um plugin NPAPI. Isto dará um grande trabalho, então se for possível não fazer uso do HWND diretamente, é recomendado evitá-lo.
- Mudanças nos gestos
- A rolagem com três dedos para cima ou para baixo em trackpads foi alterada para, por padrão, abrir e fechar a visão do Firefox Panorama (criado como TabCandy). Para voltar aos comando anteriores de rolagem para cima e para baixo, abra about:config e configure
browser.gesture.swipe.down
paracmd_scrollBottom
ebrowser.gesture.swipe.up
paracmd_scrollTop
.