Firefox 4 para desenvolvedores

There were scripting errors on this page. While those are being addressed by site editors, you can view partial content below.

{{ draft() }}

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.

Observação: Este artigo é um trabalho em progresso, assim como todos os artigos linkados nesta página. Muitos nomes de artigos são espaços reservadis e alguns tópicos provavelmente serão quebrados em múltiplos artigos. Em geral, seja cuidadoso ao vincular páginas a estes artigos, por enquantoIn general, be cautious about linking to these articles for the time beingJavas.

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 {{ HTMLElement("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: {{ HTMLElement("article") }}, {{ HTMLElement("section") }}, {{ HTMLElement("nav") }}, {{ HTMLElement("aside") }}, {{ HTMLElement("hgroup") }}, {{ HTMLElement("header") }} e {{ HTMLElement("footer") }}.
Outros elementos HTML5
O Gecko agora suporta os seguintes elementos do HTML5: {{ HTMLElement("mark") }}, {{ HTMLElement("figure") }} e  {{ HTMLElement("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 {{ HTMLElement("textarea") }} são agora redimensionáveis por padrão; você pode usar a propriedade {{ cssxref("resize") }} do CSS para desabilitar isto.
  • canvas.getContext e canvas.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 Mozilla mozGetAsFile(), o qual permite a obtenção de um arquivo baseado na memória contendo uma imagem dos conteúdos do canvas. Veja HTMLCanvasElement para detalhes.
  • canvas2dcontext.globalCompositeOperation, canvas2dcontext.lineCap e canvas2dcontext.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ão darker.
  • Foi removido o suporte para o elemento obsoleto {{ HTMLElement("spacer") }}, o qual não existe em nenhum outro navegador.
  • O elemento {{ HTMLElement("isindex") }}, quandro criado pela chamada de {{ domxref("document.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 <ins>exemplo</ins> no artigo <ins>Using files from web applications</ins>.
  • Os elementos {{ HTMLElement("script") }} internos aos elementos {{ HTMLElement("iframe") }}, {{ HTMLElement("noembed") }} e {{ HTMLElement("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 {{ cssxref("-moz-calc") }}. Isto permite especificar valores {{ xref_csslength() }} como expressões matemáticas.
Seletor de agrupamento
Suporte a {{ cssxref(":-moz-any") }} para agrupar seletores e fatorizar combinadores.
Suporte a sub-retângulo em imagens de fundo
A função {{ cssxref("-moz-image-rect") }} torna possível o uso de subretângulos de imagens como uma {{ cssxref("background-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 {{ cssxref("-moz-element") }} do CSS e a função {{ domxref("document.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
{{ cssxref("-moz-font-feature-settings") }} Permite características avançadas de customização em fontes OpenType.
{{ cssxref("-moz-tab-size") }} Especifica a largura em caracteres de espaço, de um caracter tab (U+0009) na renderização de texto.
{{ cssxref("resize") }} Permite o controle das dimensões nas quais um elemento pode ser redimensionado.

Novas pseudo-classes do CSS

Pseudo-classe Descrição
{{ cssxref(":-moz-handler-crashed") }} Usado para estilizar elementos cujos plugins tenham quebrado.
{{ cssxref(":-moz-placeholder") }} Aplicado ao espaço reservado de texto nos campos de formulário.
{{ cssxref(":-moz-submit-invalid") }} Aplicado ao botão de submeter em formulários quando um ou mais dos campos do formulário não é validado.
{{ cssxref(":-moz-window-inactive") }} Aplicado a elementos em janelas inativas.
{{ cssxref(":invalid") }} Aplicado automaticamente para os campos {{ HTMLElement("input") }} quando suas constantes são inválidas.
{{ cssxref(":optional") }} Aplicado automaticamente para os campos {{ HTMLElement("input") }} que não especifiquem o atributo required.
{{ cssxref(":required") }} Aplicado automaticamente para os campos {{ HTMLElement("input") }} que especifiquem o atributo required.
{{ cssxref(":valid") }} Aplicado automaticamente para os campos {{ HTMLElement("input") }} quando suas constantes são validadas com sucesso.

Novos pseudo-seletores do CSS

Pseudo-seletor Descrição
{{ cssxref(":-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
{{ cssxref(":-moz-any") }} Permite agrupar seletores e fatorizar combinações.
{{ cssxref("-moz-calc") }} Permite a especificação de valores {{ xref_csslength() }} como expressões matemáticas.
{{ cssxref("-moz-element") }} Permite o uso de um elemento arbitrário como imagem de fundo para {{ cssxref("background-image") }} e {{ cssxref("background") }}.
{{ cssxref("-moz-image-rect") }} Permite o uso de um sub-retângulo de uma imagem como um {{ cssxref("background-image") }} ou {{ cssxref("background") }}.

Propriedades do CSS renomeadas

Old Name New Name Notes
-moz-background-size {{ cssxref("background-size") }} O nome -moz-background-size não é mais suportado.
-moz-border-radius {{ cssxref("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 {{ cssxref("box-shadow") }}  

Modificações CSS diversas

  • A propriedade {{ cssxref("text-shadow") }} agora permite raio de desfoque de até 300px, por razões de sanidade e performance.
  • A propriedade {{ cssxref("overflow") }} não se aplica mais para elementos do grupo "table" (<thead>, <tbody> e <tfoot>).
  • A propriedade {{ cssxref("-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 para {{ cssxref("border-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 {{ cssxref("overflow") }}:visible)
  • A propriedade -moz-box-shadow foi renomeada para {{ cssxref("box-shadow") }}.
  • A propriedade {{ cssxref("text-shadow") }} agora permite raio de desfoque de até 300px, por razões de sanidade e performance.
  • A pseudoclasse {{ cssxref(":-moz-window-inactive") }} foi implementada.
  • A propriedade {{ cssxref("-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 {{ cssxref("resize") }} do CSS3 foi implementada.
  • A propriedade -moz-background-size foi renomeada para seu nome final {{ cssxref("background-size") }}; -moz-background-size não é mais suportada.
  • A propriedade {{ cssxref("overflow") }} não se aplica mais para elementos do grupo "table" (<thead>, <tbody> e <tfoot>).
  • O pseudoseletor {{ cssxref(":-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 {{ cssxref("-moz-element") }} do CSS permite o uso de um elemento arbitrário como imagem de fundo para {{ cssxref("background-image") }} e {{ cssxref("background") }}.
  • A propriedade {{ cssxref("-moz-appearance") }} agora suporta o valor -moz-win-borderless-glass, que aplica uma aparência Aero Glass a um elemento.
  • As pseudoclasses {{ cssxref(":valid") }} e {{ cssxref(":invalid") }} são agora automaticamente aplicadas para campos de validação {{ HTMLElement("input") }}.
  • A pseudoclasse {{ cssxref(":-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 {{ cssxref(":required") }} é agora automaticamente aplicada aos campos {{ HTMLElement("input") }} que especificam o atributo requerido; a pseudoclasse {{ cssxref(":optional") }} é aplicada a todos os outros campos.
  • A pseudoclasse {{ cssxref(":-moz-placeholder") }} foi adicionada para permitir a estilização de campos de texto em formulários.
  • A pseudoclasse {{ cssxref(":-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 {{ htmlelement("img") }}, assim como com a propriedade background-image do CSS.
Suporte ao atributo de mídia buffered
O atributo buffered nos elementos {{ HTMLElement("video") }} e {{ HTMLElement("audio") }} é agora suportado, permitindo a determinação de quais faixas de um arquivo de mídia foram carregadas. A interface {{ domxref("TimeRanges") }} 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 {{ HTMLElement("video") }} e {{ HTMLElement("audio") }}, assim como a interface {{ interface("nsIDOMHTMLMediaElement") }}.
Melhoramentos no posicionamento de texto SVG
Agora é possível especificar listas para os valores das propriedades x, y, dx e dy nos elementos {{ SVGElement("text") }} e {{ SVGElement("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 {{ domxref("Range") }} agora possui os métodos {{ domxref("range.getClientRects()") }} e {{ domxref("range.getBoundingClientRect()") }}.
Captura de eventos de mouse em elementos arbitrários
O suporte para as APIs setCapture() e releaseCapture() 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 {{ domxref("window.history") }} agora suporta os novos métodos pushState() e replaceState() do HTML5.
Animações usando o MozBeforePaint
Um novo evento foi adicionado, o qual combinado com o método {{ domxref("window.mozRequestAnimationFrame()") }} e a propriedade {{ domxref("window.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 {{ HTMLElement("abbr") }}, {{ HTMLElement("acronym") }}, {{ HTMLElement("address") }}, {{ HTMLElement("b") }}, {{ HTMLElement("bdo") }}, {{ HTMLElement("big") }}, {{ HTMLElement("blink") }}, {{ HTMLElement("center") }}, {{ HTMLElement("cite") }}, {{ HTMLElement("code") }}, {{ HTMLElement("dd") }}, {{ HTMLElement("dfn") }}, {{ HTMLElement("dt") }}, {{ HTMLElement("em") }}, {{ HTMLElement("i") }}, {{ HTMLElement("kbd") }}, {{ HTMLElement("listing") }}, {{ HTMLElement("nobr") }}, {{ HTMLElement("plaintext") }}, {{ HTMLElement("s") }}, {{ HTMLElement("samp") }}, {{ HTMLElement("small") }}, {{ HTMLElement("strike") }}, {{ HTMLElement("strong") }}, {{ HTMLElement("sub") }}, {{ HTMLElement("sup") }}, , {{ HTMLElement("tt") }}, {{ HTMLElement("u") }}, {{ HTMLElement("var") }}, {{ HTMLElement("xmp") }}
HTMLDivElement HTMLElement {{ HTMLElement("noembed") }}, {{ HTMLElement("noframes") }}, {{ HTMLElement("noscript") }}
HTMLWBRElement HTMLElement {{ HTMLElement("wbr") }}

Modificações DOM diversas

  • O "envoltório" de um elemento {{ HTMLElement("textarea") }} agora pode ser controlado a partir do DOM, através do atributo wrap do DOM. {{ bug(41464) }}
  • Elementos {{ HTMLElement("script") }} criados usando {{ domxref("document.createElement") }}  e inseridos em um documento agora comportam-se de acordo com a especificação do HTML5 por padrão. Scripts com o atributo src são executados assim que possível (sem manter o ordenamento) enquanto scripts sem o atributo src são executados sincronamente. Para fazer com que scripts inseridos com o atributo src sejam executados na ordem de inserção, configure-os com .async=false.
  • Os objetos {{ domxref("file") }} do DOM agora oferecem a propriedade url.
  • Suporte para FormData para XMLHttpRequest.
  • A propriedade {{ domxref("element.isContentEditable") }} foi implementada.
  • A propriedade {{ domxref("document.currentScript") }} permite determinar qual elemento {{ HTMLElement("script") }} do script está sendo executado no momento. O novos eventos {{ domxref("document.onbeforescriptexecute") }} e {{ domxref("document.onafterscriptexecute") }} são lançados antes e depois de um elemento script ser executado.
  • Adicionada a propriedade mozSourceNode ao objeto DragTransfer.
  • Adicionado o método selection.modify() ao objeto {{ domxref("Selection") }}; 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ística directories de {{ domxref("window.open") }}, qua não são suportadas em nenhum outro navegador, foi  removido. Ao invés dela, use personalbar. {{ Bug(474058) }}
  • A propriedade {{ domxref("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 {{ domxref("document.onreadystatechange") }} foi implementado.
  • O método {{ domxref("document.createElement") }} não aceita mais a tag nome entre < e > no modo quirk.
  • Os métodos {{ domxref("element.setCapture()") }} e {{ domxref("document.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 evento mousedown.
  • A propriedade {{ domxref("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 {{ domxref("window.navigator.appVersion") }} e {{ domxref("window.navigator.userAgent") }}. Ao invés deles, use o {{ domxref("window.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 {{ domxref("window.URL.createObjectURL()") }} e {{ domxref("window.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.
  • {{ domxref("Node.mozMatchesSelector()") }} agora lança uma exceção SYNTAX_ERR se o seletor de string selecionado for inválido, ao invés de, incorretamente, retornar false.
  • 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'. Veja {{ domxref("element.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 {{ domxref("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 {{ domxref("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.

{{ gecko_callout_heading("2.0") }}

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

Mudanças no DOM

{{ domxref("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 {{ XULElem("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 e TabOpen (fechar aba, selecionar aba e abrir aba) não levam mais ao elemento {{ XULElem("tabbrowser") }} (gBrowser). Eventos listeners (ouvintes) para estes eventos devem ser adicionados ao gBrowser.tabContainer ao invés de diretamente ao gBrowser.
  • O menu de contexto das abas não mais um filho anônimo do {{ XULElem("tabbrowser") }}. Ele pode portanto ser sobreposto diretamente com XUL overlays. Ele também pode ser acessado mais diretamente com JavaScript via gBrowser.tabContextMenu. Veja esta postagem no blog (en) para mais detalhes.
  • A nova propriedade {{ XULProp("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 {{ XULMeth2("showOnlyTheseTabs") }}; isto é usado pelo Firefox Panorama.
  • Adicionado o novo método {{ XULMeth2("getIcon") }}, o qual permite pegar o favicon de uma aba sem ter chamar o elemento {{ XULElem("browser") }}.
  • Adicionada a nova propriedade {{ XULProp("tabbrowser.tabs") }}, a qual permite facilmente pegar uma lista das abas em um elemento {{ XULElem("tabbrowser") }}.
  • Os novos métodos {{ XULMeth2("pinTab") }} e {{ XULMeth2("unpinTab") }} 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 {{ XULElem("menupopup") }} do XUL possui a propriedade {{ XULProp("triggerNode") }}, 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étodo {{ XULMeth2("openPopup") }}. Além disso, foi adicionada a propriedade {{ XULProp("anchorNode") }}; ela retorna a âncora especificada quando o popup foi criado.
  • O elemento {{ XULElem("panel") }} agora oferece os atributos {{ XULAttr("fade") }} e {{ XULAttr("flip") }}, 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 {{ xulattr("readonly") }} agora funciona corretamente para campos.
  • O elemento {{ xulelem("resizer") }} agora permite o uso do atributo {{ xulattr("element") }} para especificar um elemento a ser redimencionado, ao invés de redimencionar a janela.
  • O elemtno {{ xulelem("resizer") }} possui agora um atributo {{ xulattr("resizer.type", "type") }} 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 {{ cssxref(":-moz-window-inactive") }} para definir diferentes estilos para as os fundos das janelas.
  • O atributo {{ xulattr("emptytext") }} está agora obsoleto; ao invés dele, você deve usar o {{ xulattr("placeholder") }}.
  • O elemento {{ xulelem("popup") }} não é mais suportado; ao invés dele, você deve usar o {{ xulelem("menupopup") }}.
  • O elemento {{ xulelem("window") }} agora oferece um atributo {{ xulattr("accelerated") }}; quando verdadeiro, é permitido ao gerenciador de camadas por hardware, acelerar a janela.
  • O elemento {{ xulelem("stack") }} agora suporta os atributosl {{ xulattr("bottom") }} e {{ xulattr("right") }}.
  • Os eventos agora são lançados durante a customização da {{ xulelem("toolbox") }}, permitindo a detecção de mudanças nas barras de ferramentas (en).
  • O atributo {{ xulattr("alternatingbackground") }} para elementos {{ xulelem("tree") }} não é mais suportado; ao invés dele, você pode usar a pseudoclasse {{ cssxref(":-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 {{ xulelem("tabs") }} agora possui a propriedade {{ xulprop("tabbox") }}, substituindo a antiga propriedade _tabbox, a qual está obsoleta (e nunca foi documentada).
  • Elementos XUL {{ xulelem("window") }} agora possuem o atributo {{ xulattr("drawintitlebar") }}; se ele for true, a área de conteúdo da janela inclui a barra de títulos, permitindo desenhar na barra de títulos.
  • Os novos elementos TabPinned e TabUnpinned estão disponíveis, permitindo que você detecte quando abas são prendidas e desprendidas (en).
  • O novo evento TabAttrModified é enviado quando os atributos {{ xulattr("label") }}, {{ xulattr("crop") }}, {{ xulattr("busy") }}, {{ xulattr("image") }} ou {{ xulattr("selected") }} das abas são modificados.
  • Os elementos {{ xulelem("tab") }} agora possuem um atributo {{ xulattr("pinned") }}, permitindo que você determine quando uma aba está ou não correntemente presa.
  • A classe setDirectionIndicator em elementos {{ xulelem("tree") }} não fez nada por algum tempo; agora ela não é mais usada.
  • O elemento {{ XULElem("window") }} possui agora um atributo {{ XULAttr("chromemargin") }} 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 {{ XULElem("window") }} possui agora um atributo {{ XULAttr("disablechrome") }}; ele é usado para esconder a maioria do chrome em uma janela quando ela está sendo usada para exibir a IU no navegador, como em about:addons.
  • O elemento {{ XULElem("window") }} possui agora um atributo {{ XULAttr("disablefastfind") }}, 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  {{ XULElem("toolbox") }}, configurando a propriedade {{ XULProp("toolboxid") }} da {{ XULElem("toolbox") }}. Além disso, o elemento {{ XULElem("toolbox") }} agora possui uma propriedade {{ XULProp("externalToolbars") }}, 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 {{ interface("mozIStorageBindingParamsArray") }} possui agora um atributo length (comprimento) que indica o número de objetos {{ interface("mozIStorageBindingParams") }} no array.
  • O {{ ifmethod("mozIStorageStatement", "bindParameters") }} agora retorna um erro se a {{ interface("mozIStorageBindingParamsArray") }} especificada estiver vazia.
  • Adicionado o método {{ ifmethod("mozIStorageConnection", "clone") }}, o qual permite a clonagem de uma conexão de um banco de dados existente.
  • Adicionado o método  {{ ifmethod("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 {{ ifmethod("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 como NS_ERROR_STORAGE_CONSTRAINT ao invés de como NS_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 {{ interface("nsINavHistoryResult") }}, {{ interface("nsINavHistoryQueryOptions") }}, e {{ interface("nsINavHistoryContainerResultNode") }}. Mais significantemente, a interface {{ interface("nsINavHistoryResultViewer") }} foi renomeada para {{ interface("nsINavHistoryResultObserver") }}.
  • 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 {{ interface("nsIDocShell") }} e {{ interface("nsIWebBrowser") }} agora possuem um novo atributo isActive, 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 {{ interface("nsIMemory") }} de {{ ifmethod("nsIMemory","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 {{ ifmethod("nsIChannelEventSink", "onChannelRedirect") }} precisa ser atualizado para, ao invés disso, usar {{ ifmethod("nsIChannelEventSink", "asyncOnChannelRedirect") }}. Isto aceita um manipulador de callbacks, que precisa er chamado quando um redirecionamento é completado com sucesso.
  • Foi adicionado o método {{ ifmethod("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 {{ interface("nsIPref") }}, obsoleta durante algum tempo, finalmente foi removida. Se você já não mudou para {{ interface("nsIPrefService") }}, agora é o momento.
  • As interfaces {{ interface("nsISessionStore") }} e {{ interface("nsISessionStartup") }} receberam mudanças para suportar a restauração das sessões, sob demanda. Veja o método {{ ifmethod("nsISessionStore", "restoreLastSession") }}.
  • Os métodos {{ ifmethod("nsIPrincipal", "subsumes") }} e {{ ifmethod("nsIPrincipal", "checkMayLoad") }} do {{ interface("nsIPrincipal") }}, assim como seus atributos origin, csp, e URI, 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 comando manifest no seu  chrome.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 {{ interface("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 para cmd_scrollBottom e browser.gesture.swipe.up para cmd_scrollTop.

Veja também

{{ languages( { "en":  "en/Firefox_4_for_developers", "de": "de/Firefox_4_für_Entwickler", "ja": "ja/Firefox_4_for_developers", "zh-tw": "zh_tw/Firefox_4_for_developers"} ) }}

Document Tags and Contributors

Contributors to this page: Verruckt, Leandro Mercês Xavier
Last updated by: Verruckt,