Anatomia de uma WebExtension - Mozilla

Anatomia de uma WebExtension
============================

Uma extensão consiste de uma coleção de arquivos, empacotados para distribuição e instalação. Nesse artigo vamos falar rapidamente sobre os arquivos que podem estar presentes em uma extensão.

Toda extensão contém um arquivo chamado "manifest.json". Ele pode conter ponteiros para quatro outros tipos de arquivos:

* background pages: implementação de lógica de longa duração
* content scripts: executado no contexto de páginas web
* browser action files: implementação de botões na toolbar
* web accessible resources: torna o conteúdo do pacote acessível a páginas web e scripts de conteúdo

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension/webextension-anatomy.svg)

manifest.json
-------------

Esse é o único arquivo que está presente em toda WebExtension. Ele contém metadados básicos sobre a extensão, tais como o nome, a versão e as permissões que ela necessita. Também provê ponteiros para outros arquivos na extensão.

Para mais detalhes sobre o arquivo "manifest.json", acesse a página de referência.

Background pages
----------------

Muitas vezes as WebExtensions precisam manter um estado ou performance operativa de longa duração, independentemente do ciclo de vida das páginas ou janelas do navegador. As background pages e os scripts servem pra isso.

Background scripts são carregados assim que a extensão tem sua carga concluída, e permanecem carregados até que ela seja desativada ou desinstalada. No script você pode fazer uso de qualquer uma das WbExtensions APIs.

Os background scripts não possuem acesso direto às páginas web. No entanto, eles podem carregar scripts de conteúdo na página, e podem se comunicar com os scripts de conteúdo usando uma API de envio de mensagens.

Você pode incluir uma background page usando a chave `background` no "manifest.json". Você não precisa informar a sua própria background page. Se você incluir uma página de background, um arquivo vazio será criado.

```json
// manifest.json

"background": {
  "scripts": ["background-script.js"]
}
```

No entanto, você pode escolher informar a página de background como um arquivo HTML a parte:

```json
// manifest.json

"background": {
  "page": "background-page.html"
}
```

Scripts de conteúdo
-------------------

Use os scripts de conteúdo para acessar e manipular páginas web. Scripts de conteúdo são carregados dentro das páginas web e executados em um contexto particular nessa página.

Eles podem ver e manipular páginas DOM,

Scripts de conteúdo podem ver e manipular o DOM das páginas, da mesma forma como os scripts normais carregados pela página.

Ao contrário dos scripts normais, os scripts de conteúdo podem:

* fazer requisições XHR cross-domain
* utilizar um pequeno subconjunto de WebExtension APIs
* trocar mensagens com os scripts de background e acessar indiretamente todas as WebExtensions APIs.

Scripts de conteúdo não podem acessar diretamente os scripts normais da página, mas podem trocar mensagens com eles através do uso da API window.postMessage.

Normalmente, quando falamos de scripts de conteúdo, estamos nos referindo a JavaScript, mas é possível injetar CSS em paginas web que utilizam o mesmo mecanismo.

Você pode injetar scripts de conteúdo em páginas web de duas formas: anexando os scripts para todas as páginas correspondentes a um padrão de URL, ou através de programação a partir de um script de background.

Para injetar scripts em páginas com base na URL, use a chave `content_scripts` no "manifest.json", informando um ou mais scripts e um array com os padrões:

```json
// manifest.json

"content\_scripts": [
  {
    "matches": ["\*://\*.mozilla.org/\*"],
    "js": ["my-script.js"]
  }
]
```

Se a URL da página corresponder aos padrões passados na chave `matches`, os scripts passados na chave `js` serão carregados.

Para injetar os scripts na página via programação (por exemplo, quando o usuário clicar em um botão) use a API `tabs`:

```js
// background.js

chrome.tabs.executeScript({
  file: "my-script.js",
});
```

Aprenda mais sobre scripts de conteúdo lendo sua documentação.

Ações de navegador
------------------

Uma "ação de navegador" é um botão que você pode adicionar na barra de ferramentas do Firefox. O botão tem um ícone. Você pode informar múltiplos ícones em diferentes tamanhos: fazendo isso, o navegador irá selecionar o ícone mais adequado para a densidade de pixels da tela.

Opcionalmente, você pode definir um popup para o botão usando HTML, CSS e JavaScript.

Se você não definir um popup, quando o usuário clicar no botão um evento será disparado, que pode ser ouvido nos scripts de background.

Se você define um popup, o evento não é disparado: ao invés disso, o popup será mostrado para que o usuário possa interagir. Os scripts executados em popup são capazes de utilizar WebExtension APIs.

Para aprender mais sobre ações de navegador, consulte a página da API.

Recursos acessíveis na web
--------------------------

Recursos acessíveis na web são recursos como imagens, HTML, CSS, JavaScript, que podem ser incluídos na extensão e quer tornar acessível aos scripts de conteúdo e aos scripts da página. Eles podem ser referenciados a partir de scripts de página e de conteúdo, usando um URI scheme especial.

Por exemplo, se um script de conteúdo quer inserir algumas imagens em páginas da web, você pode incluí-los na extensão e torná-los acessíveis na web. Em seguida o script de conteúdo pode criar e acrescentar tags img que fazem referência às imagens através do atributo `src`.

Para entender mais, veja a documentação sobre chaves no manifest.json em recursos acessíveis na web.


tema - Mozilla

tema
====

Permite que extensões do navegador alterem seu tema.

Para usar esta API, uma extensão deve solicitar a permission (permissão) de "tema" em seu arquivo manifest.json (en-US).

**Nota:** Quando configuramos um arquivo de plano de fundo, devemos declarar a permission (permissão) de "tema" e, assim sendo, nós não poderemos usar a função theme (de tema), se esta for incompatível.

Tipo
----

`theme.Theme` (en-US)

Representa o conteúdo de um tema.

Funções
-------

`theme.getCurrent()` (en-US)

Obtém o tema atual do navegador.

`theme.update()` (en-US)

Atualiza o tema do navegador.

`theme.reset()` (en-US)

Remove quaisquer atualizações de temas feitas em uma chamada para `theme.update()` (en-US).

Evento
------

`theme.onUpdated` (en-US)

Disparada quando o navegador tiver sido alterado.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* dynamic-theme
* private-browsing-theme
* theme-integrated-sidebar


browserAction - Mozilla

browserAction
=============

Adiciona um botão a barra de ferramentas do navegador.

Uma browser action (en-US) é um botão na barra de ferramentas do navegador.

Você pode associar um popup junto ao botão. O popup é especificado usando HTML, CSS e JavaScript, apenas como uma página web normal. O JavaScript rodando no popup tem o mesmo acesso a API WebExtension completa, assim como seus scripts em backend, mas seu contexto global é o popup, não a página exibida no navegador atualmente. Para afetar páginas web você precisa comunicá-las via messages.

Se você especificar um popup ele está exibido — e o conteúdo será carregado — quando o usuário clicar no ícone. Você não especificar um popup, quando o usuário clicar no ícone um evento será disparado para sua extensão.

Você pode definir muitas ações de propriedades do navegador de modo declarativo usando a chave `browser_action` no arquivo manifest.json.

Com a API `browserAction você pode`:

* Usar `browserAction.onClicked` (en-US) para escutar por cliques no ícone.
* Atribuir e obter as propriedades do ícone — icone, titulo, popup, e assim por diante. Você pode obter e atribui-los globalmente para todas as abas, ou para uma aba específica informando o ID como um argumento adicional.
Tipos
-----

`browserAction.ColorArray` (en-US)

Um array de quatro números inteiros entre 0-55 definido uma cor RGB.

`browserAction.ImageDataType` (en-US)

Dados do pixel de uma imagem. Deve ser um objeto `ImageData` (en-US) (por exemplo, de um elemento `<canvas>`).

Funções
-------

`browserAction.setTitle()` (en-US)

Atribui ação de título do navegador. Ele será exibido em um tooltip.

`browserAction.getTitle()` (en-US)

Obtém a ação de título do navegador.

`browserAction.setIcon()` (en-US)

Atribui a ação de ícone ao navegador.

`browserAction.setPopup()` (en-US)

Atribui o documento HTML que será aberto como um popup quando o usuário clicar na ação de ícone do navegador.

`browserAction.getPopup()` (en-US)

Obtém o documento HTML atribuido como uma ação de popup do navegador.

`browserAction.openPopup()` (en-US)

Abre a ação popup do navegador.

`browserAction.setBadgeText()` (en-US)

Atribui a ação do texto distintivo do navegador. O emblema é exibido acima do ícone.

`browserAction.getBadgeText()` (en-US)

Obtém o texto do emblema do navegador.

`browserAction.setBadgeBackgroundColor()` (en-US)

Atribui a cor de fundo do emblema.

`browserAction.getBadgeBackgroundColor()` (en-US)

Obtém a cor de fundo do emblema.

`browserAction.enable()` (en-US)

Habilita a ação do navegador para uma aba. Por padrão, ações são habilitadas para todas as abas.

`browserAction.disable()` (en-US)

Desabilita a ação para uma aba do navegador, significando que ela não pode ser clicada quando aquela aba estiver ativa.

`browserAction.isEnabled()` (en-US)

Verifica se a ação do navegador está ou não habilitada.

Eventos
-------

`browserAction.onClicked` (en-US)

Disparado quando uma ação do ícone do navegador é clicada. Este evento não será disparado quando a ação do navegador tiver um popup.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* bookmark-it
* favourite-colour
* find-across-tabs
* forget-it
* google-userinfo
* native-messaging
* open-my-page-button
* permissions
* runtime-examples
* store-collected-images
* tabs-tabs-tabs

**Nota:** **Agradecimentos**Esta API é baseada na API `chrome.browserAction` do Chromium. Este documento é derivado do `browser_action.json` no código do Chromium.Os dados de compatibilidade do Microsoft Edge são fornecidos Microsoft Corporation e estão aqui inclusos sob a Creative Commons Attribution 3.0 United States License.


contextualIdentities - Mozilla

contextualIdentities
====================

Trabalhar com identidades contextuais: listar, criar, remover e atualizar identidades contextuais.

"Identidades conceituais", também conhecido como "containers", consiste em uma funcionalidade do navegador cuja premissa é que usuários assumem multiplas identidades quando navegam na internet, e desejam manter alguma separação entre tais identidades. Por exemplo, um usuário pode considerar sua "identidade de trabalho" separada de sua "identidade pessoal", e não desejar compartilhar cookies entre esses dois contextos.

Com a funcionalidade de identidades contextuais, cada uma possui um nome, cor e um ícone. Novas abas são atribuidas a uma identidade, e o nome, ícone e cor aparecerão na barra de endereço. Internamente, cada identidade guarda seu próprio cookie e não os compartilha entre outras abas.

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities/containers.png)Identidade contextual é uma funcionalidade experimental no Firefox e está habilitado apenas no Firefox Nightly. Para habilitá-lo em outras versões do Firefox, atribua true as seguintes preferências: `privacy.userContext.enabled`. Observe que embora identidades contextuais estejam disponíveis no Firefox para Android, não há uma interface gráfica funcionando com ela para esta versão de navegador.

Antes do Firefox 57, a API `contextualIdentities` é disponível apenas se a funcionalidade de identidade contextual está habilitada por si mesma. Se uma extensão tentou usar a API `contextualIdentities` API sem a funcionalidade estar habilitada, então as chamadas do método deveria resolver suas promises com `false`.

Para o Firefox 57 em diante, se uma extensão que usa a API `contextualIdentities` está instalada, então a funcionalidade de identidade contextual será habilitada automaticamente. Observe que embora ainda é possível para o usuário desabilitar a funcionalidade usando a preferência "privacy.userContext.enabled". Isse isso ocorrer, então a chamada do método `contextualIdentities` rejeitará suas promises com uma mensagem de erro.

Para mais informações sobre identidade contextual no Firefox veja este guia.

Identidades contextuais atualmente não são suportadas em outros navegadores.

Para usar esta API você precisará incluir a permissão "contextualIdentities" em seu arquivo manifest.json (en-US).

Tipos
-----

`contextualIdentities.ContextualIdentity` (en-US)

Contém informações sobre uma identidade contextual.

Funções
-------

`contextualIdentities.create()` (en-US)

Cria uma nova identidade contextual.

`contextualIdentities.get()` (en-US)

Recupera uma única identidade contextual, dado o ID do cookie que armazena.

`contextualIdentities.query()` (en-US)

Recupera todas identidades contextuais, ou todas com um nome em particular.

`contextualIdentities.update()` (en-US)

Atualiza as propriedades existentes de uma identidade contextual.

`contextualIdentities.remove()` (en-US)

Exclui uma identidade contextual.

Eventos
-------

`contextualIdentities.onCreated` (en-US)

Disparado quando uma identidade contextual é criada.

`contextualIdentities.onRemoved` (en-US)

Disparado quando uma identidade contextual é removida.

`contextualIdentities.onUpdated` (en-US)

Disparado quando uma ou mais propriedades de uma identidade contextual é atualizada.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* contextual-identities


contentScripts - Mozilla

contentScripts
==============

Use esta API para registrar o conteúdo de scripts. Registrando um conteúdo de scripts instrui o navegador para inserir conteúdo de script fornecido em páginas que batem com um padrão de URL fornecida.

Esta API é muito similar a chave do `"content_scripts"` (en-US) no manifest.json key, exceto pelo `"content_scripts"`, o conjunto de conteúdo de scripts a padrões associados são fixados no momento da instalação. Com a API `contentScripts`, uma extensão pode registrar e desregistrar scripts em tempo de execução.

Para usar a API, invoque `contentScripts.register()` (en-US) passando um objeto definido para registrar os scripts, os padrões de URL e outras opções. Ele retorna uma `Promise` que é resolvida com o objeto `contentScripts.RegisteredContentScript` (en-US).

O objeto `RegisteredContentScript` represente os scripts que foram registrados com a chamada `register()`. Ele define um método `unregister()` que você pode usar para desregistrar o conteúdo de scripts. O conteúdo de scripts também são desregistrados automaticamente quando a página que os criou é destruida. Por exemplo, se estão registrados para uma página em segundo plano serão desregistrados automaticamente quando esta página for destruida, e se eles estão registrados para uma barra lateral ou popup, também serão desregistrados automaticamente quando essas forem fechadas.

Não há permissão para a API `contentScripts`, mas uma extensão pode ter a permissão de host apropriada para algum padrão passado para o `register()`.

Tipos
-----

`contentScripts.RegisteredContentScript` (en-US)

Um objeto deste tipo é retornado pela função `contentScripts.register()` (en-US) . Ele representa o conteúdo dos scripts que foram registrados por aquela chamada, e podem ser usados para desregistrar o conteúdo do script.

Funções
-------

`contentScripts.register()` (en-US)

Registra o conteúdo dos scripts fornecidos.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* content-script-register


bookmarks - Mozilla

bookmarks
=========

A API WebExtensions `bookmarks` permite uma extensão interagir e manipular o sistema de favoritos do navegador. Você pode pode usá-lo para favoritar páginas, obter favoritos existentes e, editar, remover ou organizar os favoritos.

Para utilizar esta API, uma extensão deve ser requisitada para o "bookmarks" permission em seu arquivo `manifest.json` (en-US) .

Tipos
-----

`bookmarks.BookmarkTreeNode` (en-US)

Representa um favorito ou um diretório de favoritos como árvore.

`bookmarks.BookmarkTreeNodeType` (en-US)

O enum `String` o qual descreve se um nó na árvore é ou não um favorito, uma pasta ou um separador.

`bookmarks.BookmarkTreeNodeUnmodifiable` (en-US)

O enum `String` o qual especifica porque um favorito ou uma pasta não pode ser modificado.

`bookmarks.CreateDetails` (en-US)

Contém informações ao qual é passada para a função `bookmarks.create()` (en-US) quando um novo favorito é criado.

Funções
-------

`bookmarks.create()` (en-US)

Cria um favorito ou uma pasta.

`bookmarks.get()` (en-US)

Retrieves one or more `BookmarkTreeNode` (en-US)s, given a bookmark's ID or an array of bookmark IDs.

`bookmarks.getChildren()` (en-US)

Recupera os filhos especificados `BookmarkTreeNode` (en-US).

`bookmarks.getRecent()` (en-US)

Recupera um número requisitado de favoritos adicionados recentemente.

`bookmarks.getSubTree()` (en-US)

Recupera uma parte da árvore de favoritos, iniciando por um nó previamente especificado.

`bookmarks.getTree()` (en-US)

Recupera a árvore de favoritos inteira em um array de objetos `BookmarkTreeNode` (en-US).

`bookmarks.move()` (en-US)

Move o especificado `BookmarkTreeNode` (en-US) para um novo local dentro da árvore de favoritos.

`bookmarks.remove()` (en-US)

Remove um favorito ou uma pasta de favoritos vazia dado o ID do nó.

`bookmarks.removeTree()` (en-US)

Remove recursivamente uma pasta de favoritos; isto é; dado o ID do nó da pasta e todos seus descendentes.

`bookmarks.search()` (en-US)

Procura por `BookmarkTreeNode` (en-US)s que batam com o conjunto de critérios especificados.

`bookmarks.update()` (en-US)

Atualiza o título e/ou autor do favorito de uma URL, ou o nome de uma pasta de favoritos dado o ID do favorito.

Eventos
-------

`bookmarks.onCreated` (en-US)

Disparado quando um favorito ou uma pasta é criado.

`bookmarks.onRemoved` (en-US)

Disparado quando um favorito ou uma pasta é removido. Quando uma pasta é removida recursivamente, uma simples notificação é disparada para o diretório, e nenhum para seu conteúdo.

`bookmarks.onChanged` (en-US)

Disparado quando um favorito ou pasta é modificado. Atualmente, somente mudanças no `title` e `url` o disparam.

`bookmarks.onMoved` (en-US)

Disparado quando um favorito ou pasta é movido para uma pasta pai diferente ou para um novo local dentro deste pasta.

`bookmarks.onChildrenReordered` (en-US)

Fired when the user has sorted the children of a folder in the browser's UI. This is not called as a result of a `move()` (en-US).

`bookmarks.onImportBegan` (en-US)

Disparado quando uma sessão de importação de favoritos começa. Custosos observers `bookmarks.onCreated` (en-US) atualizam até o `bookmarks.onImportEnded` (en-US) ser disparado. Observers deveriam ainda manipular outras notificações imediatamente.

`bookmarks.onImportEnded` (en-US)

Disparado quando uma sessão de importação de favoritos é finalizada.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* bookmark-it

**Nota:** **Agradecimentos**Esta API é baseada na API Chromium `chrome.bookmarks` . Esta documentação é derivada do `bookmarks.json` no código do Chromium.Os dados de compatibilidade do Microsoft Edge são fornecidos pela Microsoft Corporation e aqui estão sob a Creative Commons Attribution 3.0 United States License.


clipboard - Mozilla

clipboard
=========

A API de área de transferência habilita uma extensão para copiar itens para a área de transferência do sistema. Atualmente a API suporta apenas a cópia de imagens, mas é pretendido suportar a cópia de texto e HTML no futuro.

Esta API WebExtension existe primariamente por causa que o padrão da API web para área de transferência não suporta escrita de imagens. Se e quando esta funcionalidade for adicionada na API wb padrão, esta API pode ser depreciada.

Leitura da área de transfência não é suportada por esta API, devido esta já poder ser lida usando as APIs padrão da plataforma web. Veja interagindo com a área de transferência.

Esta API é baseada na API `clipboard` do Chrome's API, mas esta API está disponível somente para o Chrome.

Para utilizar esta API voce precisa ter a permissão "clipboardWrite".

Funções
-------

`clipboard.setImageData()` (en-US)

Copia uma imagem para a área de transferência.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**Nota:** **Agradecimentos**Esta API é baseada na API Chromium `chrome.clipboard`.


cookies - Mozilla

cookies
=======

Habilita extensões a obter e atribuir cookies, e ser notificado quando eles mudam.

Para usar esta API, você precisa incluir a API permission "cookies" em seu arquivo manifest.json (en-US), bem como a host permissions para os sites cujos cookies você precisa acessar. Veja cookie Permissions.

Permissões
----------

Para usar esta API, uma extensão especificar a "cookies" API permission em seu arquivo manifest, junto com a host permissions para qualquer site que deseja acessar os cookies. O add-on pode ler ou escrever qualquer cookie no qual poderia ser lido ou escrito pela URL correspondente nas permissões de host, por exemplo:

`http://*.example.com/`

Uma extensão com esta permissão de host pode:

* Ler um cookie inseguro para `www.example.com`, com qualquer caminho.
* Escrever um cookie seguro ou inseguro para `www.example.com`, com qualquer caminho.

*não* pode:

* Ler um cookie seguro de `www.example.com`.

`http://www.example.com/`

Uma extensão com esta permissão de host pode:

* Ler um cookie não seguro para `www.example.com`, com qualquer caminho.
* Ler um cookie não seguro para `.example.com`, com qualquer caminho.
* Escrever um cookie seguro ou não seguro para `www.example.com` com qualquer caminho.
* Escrever um cookie seguro ou não seguro para `.example.com` com qualquer caminho.

*não* pode:

* Ler ou escrever um cookie para `foo.example.com`.
* Ler ou escrever um cookie para `foo.www.example.com`.

`*://*.example.com/`

Uma extensão com esta permissão de host pode:

* Ler ou escrever um cookie seguro ou inseguro para `www.example.com` com qualquer caminho.

Isolamento de primera parte
---------------------------

Cookies de terceiros são aquleles enviados por sites em que você está num dado momento, por exemplo:

1. Você acessa bbc.com. Ele contém uma publicidade do tracker.com que atribui um cookie associado com o domínio "tracker.com".
2. Você acessa cnn.com. Ele também contém uma publicidade do tracker.com que atribui um cookie associado ao domínio "tracker.com".
3. Eventualmente ambos os cookies podem ser enviados para tracker.com. Quem então pode descobrir que o mesmo usuário visitou ambos os sites.

Quando um isolamento de primeira parte está ativo, cookies são ainda qualificados pelo domínio da página original visitada pelo usuário (essencialmente, o domínio exibe o usuário na barra da URL, também conhecido como "domínio de primeira parte). Isto significa que não é possivel para um rastreador correlacionar o cookie da bbc.com com o cookie da cnn.com, então o rastreador não pode monitorar um simples usuários através de ambos os sites.

Isolamento de primera parte pode ser habilitado diretamente pelo usuário ajustando a configuração do navegador , e pode ser atribuia do extensões usando a configuração `firstPartyIsolate` atribuida a API `privacy` (en-US). Observe que este isolamento de primeira parte está habilitado por padrão no navegador Tor.

Na API `cookies`, o domínio de primeira parte é representado usando o atributo `firstPartyDomain`. Todos os cookies atribuidos enquanto o isolamento de primeira parte está habilitado terá este atributo atribuito para o domínio da página original. No exemplo acima, deveria ser "bbc.com" para um cookie e "cnn.com" para outro. Todos os cookies atribuidos pelos websites enquanto o isolamento de primeira parte estiver desabilitado terão sua propriedade atribuida a uma string vazia.

As APIs `cookies.get()` (en-US), `cookies.getAll()` (en-US), `cookies.set()` (en-US) and `cookies.remove()` (en-US) aceitam a opção `firstPartyDomain`.

Quando o isolamento de primeira parte está habilitado, você deve informar esta opção ou a chamada da API irá falhar e retornar uma promise rejeitada. For `get()`, `set()`, and `remove()` you must pass a string value. Para um `getAll()`, você pode passar `null`, e irá obter todos os cookies que possuem ou não um valor não vazio para o `firstPartyDomain`.

Quando o isolamento de primeira parte está desabilitado, o parâmetro `firstPartyDomain` é opcional por padrão é uma string vazia. Uma string não vazia pode ser utilizada para recuperar ou podificar cookies de isolamento de primeira parte. Da mesma forma, passando `null` como `firstPartyDomain` para o `getAll()` retornará todos os cookies.

Tipos
-----

`cookies.Cookie` (en-US)

Representa a informação sobre um cookie HTTP.

`cookies.CookieStore` (en-US)

Representa um cookie armazenado no navegador.

`cookies.OnChangedCause` (en-US)

Representa o motivo da mudança de um cookie.

Métodos
-------

`cookies.get()` (en-US)

Recupera informações sobre um único cookie.

`cookies.getAll()` (en-US)

Recupera todos os cookies com o padrão de um conjunto de filtros fornecido.

`cookies.set()` (en-US)

Atribui um cookie com um dado fornecido; pode sobrescrever cookies equivalentes caso existam.

`cookies.remove()` (en-US)

Remove um cookie pelo nome.

`cookies.getAllCookieStores()` (en-US)

Lista todos os cookies armazenados.

Manipulador de eventos
----------------------

`cookies.onChanged` (en-US)

Disparado quando um cookie é criado ou removido.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* cookie-bg-picker
* list-cookies

**Nota:** **Agradecimentos**Esta API é baseada na API `chrome.cookies` do Chromium. Esta documentação é derivada do `cookies.json` no código do Chromium.


browsingData - Mozilla

browsingData
============

Habilita extensões a limpar os dados que estão acumulados enquando o usuário navega.

Na API `browsingData`, os dados de navegação são divididos em tipos:

* cache do browser
* cookies
* downloads
* histórico
* armazenamento local
* dados de plugin
* dados de formulários salvos
* senhas salvas

Você pode usar a função `browsingData.remove()` para remover qualquer combinação desses tipos. Há também funções específicas para remover cada tipo de data em particular, como por exemplo `removePasswords()` (en-US), `removeHistory()` (en-US) e assim por diante.

Todas funções `browsingData.remove[X]()` pegam o objeto `browsingData.RemovalOptions` (en-US) que você usa para controlar outros dois aspectos da remoção de dados:

* quão antigos são os dados para a remoção
* se é para remover dados de páginas normais, ou também para hospedar aplicativos web ou add-ons. Observe que esta opção ainda não é suportada no Firefox.

Finalmente, a API `browsingData.settings()` (en-US) fornece uma função que retorna o atual valor das configurações da funcionalidade "Limpar Histórico".

Para usar esta API você deve ter a permissão de API "browsingData".

Tipos
-----

`browsingData.DataTypeSet` (en-US)

Objeto usado para especificar o tipo de dado para remoção: por exemplo, histórico, downloads, senhas e assim por diante.

`browsingData.RemovalOptions` (en-US)

Objeto usado para especificar o quanto tempo para remoção de dados, e se remover dados adicionados em uma navegação web normal, por aplicativos hospedados ou por add-ons.

Methods
-------

`browsingData.remove()`

Remove os dados de navegação especificado pelo seu tipo.

`browsingData.removeCache()`

Limpa o cache do navegador.

`browsingData.removeCookies()`

Remove os cookies.

`browsingData.removeDownloads()`

Remove a lista de arquivos baixados.

`browsingData.removeFormData()`

Limpa os dados de um formulário salvo.

`browsingData.removeHistory()` (en-US)

Limpa o histórico do navegador.

`browsingData.removeLocalStorage()` (en-US)

Limpa qualquer local storage criado por websites.

`browsingData.removePasswords()` (en-US)

Limpa passwords salvos.

`browsingData.removePluginData()` (en-US)

Limpa os dados associados com plugins.

`browsingData.settings()` (en-US)

Obtém o valor atual de configuração da funcionalidade "Limpar Histórico" do navegador.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* forget-it

**Nota:** **Agradecimentos**Esta API é baseada na API `chrome.browsingData` do Chromium.Os dados de compatibilidade do Microsoft Edge compatibility são fornecidos pela Microsoft Corporation e aqui estão inclusos sob a Creative Commons Attribution 3.0 United States License.


browserSettings - Mozilla

browserSettings
===============

Habilita uma extensão para modificar certas configurações globais do navegador. Cada propriedade desta API é um objeto `BrowserSetting` (en-US), provendo a capacidade de modificar uma configuração particular.Devido estas serem configurações globais, é possível haver conflito entre extensões. Veja a documentação `BrowserSetting.set()` para detalhes de como ligar com conflitos .
Para usar esta API você precisa ter a permissão "browserSettings".

Propriedades
------------

`browserSettings.allowPopupsForUserEvents` (en-US)

Determina se o código em execução nas páginas podem mostrar popups em resposta a eventos do usuário.

`browserSettings.cacheEnabled` (en-US)

Determina se o cache do navegador está ou não habilitado.

`browserSettings.closeTabsByDoubleClick` (en-US)

Determina se a aba selecionada pode ser fechada com um duplo click.

`browserSettings.contextMenuShowEvent` (en-US)

Determina o evento do mouse que dispara um menu de contexto de popup.

`browserSettings.homepageOverride` (en-US)

Lê o valor da página inicial do navegador.

`browserSettings.imageAnimationBehavior` (en-US)

Determina como o navegador trata imagens animadas.

`browserSettings.newTabPageOverride` (en-US)

Lê o valor da nova aba do navegador.

`browserSettings.newTabPosition` (en-US)

Controla a posição de abas recentemente abertas relativa as abas já presentes.

`browserSettings.openBookmarksInNewTabs` (en-US)

Determina se os favoritos são abertos na aba atual ou em uma nova aba.

`browserSettings.openSearchResultsInNewTabs` (en-US)

Determina se a busca de resultados é aberta na aba atual ou em uma nova.

`browserSettings.openUrlbarResultsInNewTabs` (en-US)

Determina se as sugestões do autocompletar da barra de endereços são abertas na aba atual ou em uma nova.

`browserSettings.overrideDocumentColors` (en-US)

Controla se as cores de escolha do usuário sobrescreverão as cores das páginas.

`browserSettings.useDocumentFonts` (en-US)

Controle se o navegador usará as fontes especificadas pela página web ou somente fontes embutidas.

`browserSettings.webNotificationsDisabled` (en-US)

Previne que os sites exibam notificações usando a API Web `Notification`.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


commands - Mozilla

commands
========

Escuta por usuário executando comandos que você registrou usando o `commands` manifest.json key.

Tipos
-----

`commands.Command` (en-US)

Objeto representando um comando. Contém a informação especificada no comando `commands` manifest.json key.

Funções
-------

`commands.getAll` (en-US)

Obtém todos os comandos registrados para esta extensão.

`commands.reset` (en-US)

Reseta a descrição do comando dado e atalho para os valores dados na chave do manifesto.

`commands.update` (en-US)

Modifica a descrição ou atalho dado um comando.

Eventos
-------

`commands.onCommand` (en-US)

Disparado quando um comando é executado usando seu atalho associado ao teclado.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* commands

**Nota:** **Agradecimentos**Esta API é baseada na API `chrome.commands` do Chromium.Os dados de compatibilidade do Microsoft Edge são fornecidos pela Microsoft Corporation e estão aqui inclusos sob a Creative Commons Attribution 3.0 United States License.


alarms - Mozilla

alarms
======

Executar um código agendado para um horário específico no futuro. Isto é como o `setTimeout()` (en-US) e `setInterval()` (en-US), exceto essas funções não funcionam no segundo plano com páginas carregadas sob demanda.

Para usar estas API você precisa ter a "alarms" permission.

Tipos
-----

`alarms.Alarm` (en-US)

Informações sobre um alarme em particular.

Funções
-------

`alarms.create()` (en-US)

Cria um alarme.

`alarms.get()` (en-US)

Obtém um alarme específico dado seu nome.

`alarms.getAll()` (en-US)

Obtém todos os alarmes agendados.

`alarms.clear()` (en-US)

Limpa um alarme específico dado seu nome.

`alarms.clearAll()` (en-US)

Limpa todos os alarmes agendados.

Eventos
-------

`alarms.onAlarm` (en-US)

Disparado quando o alarme acaba.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* chill-out
* dynamic-theme

**Nota:** **Agradecimentos**Esta API é baseada na API Chromium's `chrome.alarms` .Dados de compatibilidade do Microsoft Edge fornecidos pela Microsoft Corporation aqui inclusos sob a Creative Commons Attribution 3.0 United States License.


menus - Mozilla

menus
=====

Adicione itens ao sistema de menu do navegador.

Esta API é modelada sobre a API "contextMenus" do Chrome, que permite que extensões do Chrome adicione itens para o contexto de menu do navegador. A API `browser.menus` adiciona alguns recursos à API do Chrome.

Antes do Firefox 55, esta API foi também nomeada, originalmente, de `contextMenus`, e esse nome era mantido como um alias; portanto, você pode usar o `contextMenus` para escrever um código que funcione no Firefox e também em outros navegadores.

Para usar essa API, você precisa da permissão de `menus`. Você também pode usar o alias `contextMenus` em vez de `menus`, mas se usar, a API deve ser acessada como `browser.contextMenus`.

Exceto para `menus.getTargetElement()` (en-US), essa API não pode ser usada de scripts de conteúdo (content scripts).

Criando itens de menu
---------------------

Para criar um item de menu, chamme o método `menus.create()` (en-US). Você passa esse método como um objeto contendo opções para o item, incluindo o ID do item, o tipo do item, e os contextos no qual ele deve ser mostrado.

Escute os cliques no seu item de menu adicionando um ouvinte para o evento `menus.onClicked` (en-US). Este ouvinte será passado

Listen for clicks on your menu item by adding a listener to the `menus.onClicked` (en-US) event. Este ouvinte receberá um objeto `menus.OnClickData` (en-US) que contém os detalhes do evento.

Você pode criar quatro tipos diferentes de itens de menu, com base no valor da propriedade `type` que você fornece nas opções para `create()`:

* "normal": um item de menu que apenas mostra um rótulo.
* "checkbox": um item de menu que representa um estado binário. Ele mostra uma marca de verificação próxima ao rótulo. Clicar no item ativa esta marca. O ouvinte de clique receberá duas propriedades extras: "checked", indicando que o item foi marcado agora, e "wasChecked", indicando que o item foi marcado antes do evento do clique.
* "radio": um item de menu que representa um de um grupo de escolhas. Como uma marca de verificação, isso também mostra uma marca de verificação próxima ao rótulo, e seu ouvinte de clique receberá "checked" e "wasChecked". No entanto, se você criar mais de um item de rádio, os itens funcionarão como um grupo de itens de rádio: apenas um item no grupo poderá ser verificado e clicar em um item o tornará o item marcado.
* "separator": uma linha separando um grupo de itens.

Se você criou mais de um item de menu de contexto ou mais de um item de menu de ferramentas, os itens serão colocados em um submenu. O pai do submenu será identificado com o nome da extensão. Por exemplo, aqui está uma extensão chamada "Demonstração de menu" ("Menu demo"), que adicionou dois itens de menu de contexto:

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/menus/menus-1.png)

Ícones
------

Se você especificou ícones para sua extensão usando a chave "icons" do manifest, o item de menu exibirá o ícone especificado ao lado do rótulo. O navegador tentará escolher um ícone de 16x16 pixels para uma exibição normal ou um ícone de 32x32 pixels para uma exibição de alta densidade:

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/menus/menus-2.png)

Apenas para itens dentro de um submenu, você pode especificar ícones customizados passando a opção `icons` para o `menus.create()` (en-US):

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/menus/menus-3.png)

Exemplo
-------

Aqui está um menu de contexto contendo quatro itens: um item normal, dois itens de rádio com separadores em cada lado, e uma marca de seleção. Os itens de rádio receberam ícones customizados.

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/menus/menus-4.png)Você pode criar um submenu como este usando o código abaixo:

```js
browser.menus.create(
  {
    id: "remove-me",
    title: browser.i18n.getMessage("menuItemRemoveMe"),
    contexts: ["all"],
  },
  onCreated,
);

browser.menus.create(
  {
    id: "separator-1",
    type: "separator",
    contexts: ["all"],
  },
  onCreated,
);

browser.menus.create(
  {
    id: "greenify",
    type: "radio",
    title: browser.i18n.getMessage("menuItemGreenify"),
    contexts: ["all"],
    checked: true,
    icons: {
      16: "icons/paint-green-16.png",
      32: "icons/paint-green-32.png",
    },
  },
  onCreated,
);

browser.menus.create(
  {
    id: "bluify",
    type: "radio",
    title: browser.i18n.getMessage("menuItemBluify"),
    contexts: ["all"],
    checked: false,
    icons: {
      16: "icons/paint-blue-16.png",
      32: "icons/paint-blue-32.png",
    },
  },
  onCreated,
);

browser.menus.create(
  {
    id: "separator-2",
    type: "separator",
    contexts: ["all"],
  },
  onCreated,
);

var checkedState = true;

browser.menus.create(
  {
    id: "check-uncheck",
    type: "checkbox",
    title: browser.i18n.getMessage("menuItemUncheckMe"),
    contexts: ["all"],
    checked: checkedState,
  },
  onCreated,
);
```

Tipos
-----

`menus.ContextType` (en-US)

Os diferentes contextos em que um menu pode aparecer.

`menus.ItemType` (en-US)

O tipo de item de menu: "normal", "checkbox", "radio", "separator".

`menus.OnClickData` (en-US)

Informação enviada quando um item do menu é clicado.

Propriedades
------------

`menus.ACTION_MENU_TOP_LEVEL_LIMIT` (en-US)

O número máximo de itens de extensão de nível superior que podem ser adicionados a um item de menu cujo ContextType seja "browser\_action" ou "page\_action".

Funções
-------

`menus.create()` (en-US)

Cria um novo item de menu.

`menus.getTargetElement()` (en-US)

Retorna o elemento para um `info.targetElementId` determinado.

`menus.overrideContext()` (en-US)

Oculta todos os itens de menu padrão do Firefox para fornecer uma interface de usuário personalizada do menu de contexto.

`menus.refresh()` (en-US)

Atualiza um menu que está sendo exibido no momento.

`menus.remove()` (en-US)

Remove um item do menu.

`menus.removeAll()` (en-US)

Remove todos os itens do menu adicionados por esta extensão.

`menus.update()` (en-US)

Atualiza um item do menu criado anteriormente.

Eventos
-------

`menus.onClicked` (en-US)

Ativado quando um item de menu é clicado.

`menus.onHidden` (en-US)

Ativado quando o navegador esconde um menu.

`menus.onShown` (en-US)

Ativado quando o navegador mostra um menu.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Example extensions
------------------

* menu-accesskey-visible
* menu-demo
* menu-labelled-open
* menu-remove-element
* menu-search
* session-state

**Nota:** **Reconhecimentos**Esta API é baseada na API `chrome.contextMenus` do Chromium. Esta documentação é derivada do `context_menus.json` do código do Chromium .


browsingData.removeFormData() - Mozilla

browsingData.removeFormData()
=============================

Limpa os dados que o navegador salvou para formulários com preenchimento automático.

Você pode usar o parâmetro `removalOptions`, que é um objeto `browsingData.RemovalOptions` (en-US), para:

* limpar apenas os dados de formulários inseridos após determinado tempo.
* controlar se limpar os dados do formulário apenas de uma página web normal ou limpa os dados de um app e extensões hospedados também.

Esta é uma função assíncrona que retorna uma `Promise`.

Sintaxe
-------

```js
let removing = browser.browsingData.removeFormData(
  removalOptions, // objeto RemovalOptions
);
```

### Parâmetros

`removalOptions`

`object`. Um objeto `browsingData.RemovalOptions` (en-US), que pode ser usado para limpar apenas dados de formulários inseridos após determinado tempo, e limpa os dados inseridos apenas de uma página web normal ou limpa os dados de apps e extensões hospedados.

### Valor retornado

Uma `Promise` que será realizada sem argumentos quando a remoção for finalizada. Se ocorrer qualquer erro, a promise será rejeitada com uma mensagem de erro.

Exemplos
--------

Remove dados de formulários salvos na última semana:

```js
function onRemoved() {
  console.log("removido");
}

function onError(error) {
  console.error(error);
}

function weekInMilliseconds() {
  return 1000 \* 60 \* 60 \* 24 \* 7;
}

let oneWeekAgo = new Date().getTime() - weekInMilliseconds();

browser.browsingData
  .removeFormData({ since: oneWeekAgo })
  .then(onRemoved, onError);
```

Remove todos os dados de formulário salvos:

```js
function onRemoved() {
  console.log("removido");
}

function onError(error) {
  console.error(error);
}

browser.browsingData.removeFormData({}).then(onRemoved, onError);
```

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

>
> **Note:** Esta API é baseada na API do Chromium `chrome.browsingData`.
>
>
> A compatibilidade dos dados do Microsoft Edge é fornecida pela Microsoft Corporation e é incluída aqui sob a licença Creative Commons Attribution 3.0 United States.
>
>
>


browsingData.removeCookies() - Mozilla

browsingData.removeCookies()
============================

Limpa os cookies do navegador.

Você pode usar o parâmetro `removalOptions`, em que é um objeto `browsingData.RemovalOptions` (en-US), para:

* limpar apenas os cookies criados em determinado tempo.
* controlar se limpar os cookies apenas de uma página web normal ou limpa os cookies de um app e extensões hospedados.

Esta é uma função assíncrona que retorna uma `Promise`.

Sintaxe
-------

```js
let removing = browser.browsingData.removeCookies(
  removalOptions, // objeto RemovalOptions
);
```

### Parâmetros

`removalOptions`

`object`. Um objeto `browsingData.RemovalOptions` (en-US), que pode ser usado para limpar apenas cookies criados depois de determinado tempo, e limpa os cookies apenas de uma página web normal ou limpa os cookies de apps e extensões hospedados.

### Valor retornado

Uma `Promise` que será realizada sem argumentos quando a remoção for finalizada. Se ocorrer qualquer erro, a promise será rejeitada com uma mensagem de erro.

Exemplos
--------

Remove cookies criados na última semana:

```js
function onRemoved() {
  console.log("removido");
}

function onError(error) {
  console.error(error);
}

function weekInMilliseconds() {
  return 1000 \* 60 \* 60 \* 24 \* 7;
}

let oneWeekAgo = new Date().getTime() - weekInMilliseconds();

browser.browsingData
  .removeCookies({ since: oneWeekAgo })
  .then(onRemoved, onError);
```

Remove todos os cookies:

>
> **Warning:** Usar a API para remover todos os cookies irá, simultâneamente, limpar todos os objetos local storage (incluindo aqueles de outras extensões)
>
>
> Se você quer limpar todos os cookies sem alterar as informações do local storage, use browser.cookies para percorrer and remover os conteúdos de todos os cookies armazenados
>
>
>

```js
function onRemoved() {
  console.log("removido");
}

function onError(error) {
  console.error(error);
}

browser.browsingData.removeCookies({}).then(onRemoved, onError);
```

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

>
> **Note:** Esta API é baseada na API do Chromium `chrome.browsingData`.
>
>
> A compatibilidade dos dados do Microsoft Edge é fornecida pela Microsoft Corporation e é incluída aqui sob a licença Creative Commons Attribution 3.0 United States.
>
>
>


browsingData.removeCache() - Mozilla

browsingData.removeCache()
==========================

Limpa o cache do navegador.

Note que apesar desta função receber um objeto `browsingData.RemovalOptions` (en-US), ele será ignorado. Todo o cache sempre será limpo usando esta função.

Esta é uma função assíncrona que retorna uma `Promise`.

Sintaxe
-------

```js
let removing = browser.browsingData.removeCache(
  removalOptions, // objeto RemovalOptions
);
```

### Parâmetros

`removalOptions` Optional

`object`. Um objeto `browsingData.RemovalOptions` (en-US). Este parâmetro não tem efeito.

### Valor retornado

Uma `Promise` que será realizada sem argumentos quando a remoção for finalizada. Se ocorrer qualquer erro, a promise será rejeitada com uma mensagem de erro.

Exemplos
--------

Limpar o cache do navegador:

```js
function onRemoved() {
  console.log("removido");
}

function onError(error) {
  console.error(error);
}

browser.browsingData.removeCache({}).then(onRemoved, onError);
```

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**Nota:** Esta API é baseada na API do Chromium `chrome.browsingData`.

A compatibilidade dos dados do Microsoft Edge é fornecida pela Microsoft Corporation e é incluída aqui sob a licença Creative Commons Attribution 3.0 United States.


browsingData.removeDownloads() - Mozilla

browsingData.removeDownloads()
==============================

Limpa o histórico de objetos baixados no navegador. Note que isto não deleta os arquivos baixados de fato, apenas os registros no histórico do navegador.

Você pode usar o parâmetro `removalOptions`, em que é um objeto `browsingData.RemovalOptions` (en-US), para:

* limpar apenas os itens baixados em determinado tempo.
* controlar se limpar os registros doe itens baixados apenas de uma página web normal ou limpa os registros de um app e extensões hospedados.

Esta é uma função assíncrona que retorna uma `Promise`.

Sintaxe
-------

```js
let removing = browser.browsingData.removeDownloads(
  removalOptions, // objeto RemovalOptions
);
```

### Parâmetros

`removalOptions`

`object`. Um objeto `browsingData.RemovalOptions` (en-US), que pode ser usado para limpar apenas os registros criados após determinado tempo, e limpa os registros apenas de uma página web normal ou limpa os registros de apps e extensões hospedados.

### Valor retornado

Uma `Promise` que será realizada sem argumentos quando a remoção for finalizada. Se ocorrer qualquer erro, a promise será rejeitada com uma mensagem de erro.

Exemplos
--------

Remove registros de arquivos baixados na última semana:

```js
function onRemoved() {
  console.log("removed");
}

function onError(error) {
  console.error(error);
}

function weekInMilliseconds() {
  return 1000 \* 60 \* 60 \* 24 \* 7;
}

let oneWeekAgo = new Date().getTime() - weekInMilliseconds();

browser.browsingData
  .removeDownloads({ since: oneWeekAgo })
  .then(onRemoved, onError);
```

Remove todos os registros de objetos baixados:

```js
function onRemoved() {
  console.log("removed");
}

function onError(error) {
  console.error(error);
}

browser.browsingData.removeDownloads({}).then(onRemoved, onError);
```

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

>
> **Note:** Esta API é baseada na API do Chromium `chrome.browsingData`.
>
>
> A compatibilidade dos dados do Microsoft Edge é fornecida pela Microsoft Corporation e é incluída aqui sob a licença Creative Commons Attribution 3.0 United States.
>
>
>


browsingData.remove() - Mozilla

browsingData.remove()
=====================

Remove o dado de navegação especificado.

O dado de navegação a ser removido está especificado na opção `dataTypes`, em que é um objeto `browsingData.DataTypeSet` (en-US).

Você pode usar a opção `removalOptions`, um `browsingData.RemovalOptions` (en-US) objeto, para controlar o quão longe no passado a remoção de dados será feita e se deseja remover dados apenas de páginas normais ou remover de aplicativos e extensões hospedados também.

Isso é uma função assíncrona que retorna uma `Promise`.

Sintaxe
-------

```js
let removing = browser.browsingData.remove(
  removalOptions, // RemovalOptions object
  dataTypes, // DataTypeSet object
);
```

### Parâmetros

`removalOptions`

`object`. Um objeto `browsingData.RemovalOptions` (en-US), que pode ser usado para controlar o quão longe no passado a remoção de dados será feita e se deseja remover dados apenas de páginas normais ou remover de aplicativos e extensões hospedados também.

`dataTypes`

`object`. Um objeto `browsingData.DataTypeSet` (en-US), descrevendo os tipos de dados para remover (e.g. histórico, downloads, ...).

### Valor retornado

Uma `Promessa` que será realizada sem argumentos quando a remoção terminar. Se ocorrer algum erro, a promessa será rejeitada com uma mensagem de erro.

Exemplos
--------

Remove o histórico de download e navegação da última semana:

```js
function onRemoved() {
  console.log("removed");
}

function onError(error) {
  console.error(error);
}

function weekInMilliseconds() {
  return 1000 \* 60 \* 60 \* 24 \* 7;
}

let oneWeekAgo = new Date().getTime() - weekInMilliseconds();

browser.browsingData
  .remove({ since: oneWeekAgo }, { downloads: true, history: true })
  .then(onRemoved, onError);
```

Remove todo o histórico de download e navegação:

```js
function onRemoved() {
  console.log("removed");
}

function onError(error) {
  console.error(error);
}

let oneWeekAgo = new Date().getTime() - weekInMilliseconds();

browser.browsingData
  .remove({ since: oneWeekAgo }, { downloads: true, history: true })
  .then(onRemoved, onError);
```

### Example extensions

* forget-it
Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

>
> **Note:** This API is based on Chromium's `chrome.browsingData` API.
>
>
> Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
>
>
>


permissões - Mozilla

permissões
==========

|  |  |
| --- | --- |
| Tipo | `Array` |
| Obrigatório | Não |
| Exemplo |
```json
"permissions": [
  "\*://developer.mozilla.org/\*",
  "webRequest"
]
```
 |

Use a chave `permissions` para solicitar privilégios especiais para sua extensão. Esta chave é um array de strings, onde cada string é uma solicitação para uma permissão.

Se você solicitar permissões usando esta chave, o navegador poderá informar ao usuário que a extensão a ser instalada está solicitando certos privilégios, e perguntar se aceita ou não conceder esses privilégios. O navegador também poderá permitir que o usuário inspecione os privilégios de uma extensão depois que essa for instalada.

A chave pode conter três tipos de permissões:

* permissões de servidor (host)
* permissões de API
* a permissão activeTab (aba ativa)
Permissões de servidor (host)
-----------------------------

Permissões de servidor são espscificadas como match patterns (en-US). Cada *pattern* identifica um grupo de URLs para os quais a extensão solicita privilégios adicionais. Por exemplo, uma permissão de servidor poderia ser `"*://developer.mozilla.org/*"`.

Os privilégios adicionais incluem:

* acesso XMLHttpRequest e fetch para aquelas origens sem restrições *cross-origin* (mesmo para requisições feitas a partir de *content scripts*)
* habilidade de injetar scripts programaticamente (usando tabs.executeScript (en-US)) em páginas servidas a partir daquelas origens
* habilidade de receber eventos a partir da API webRequest (en-US) para aqueles servidores
* habilidade de acessar cookies daquele servidor usando a API cookies, caso a permissão de API "cookies" também esteja incluída.
* desconsiderar a proteção contra rastreamento se o servidor for um domínio completo sem asteriscos. Não funciona com `<all_urls>`.

No Firefox, da versão 56 em diante, extensões recebem automaticamente permissões de servidor para sua própria origem, que é na forma:
```

moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
```

onde `60a20a9b-1ad4-af49-9b6c-c64c98c37920` é o ID interno da extensão. A extensão pode obter essa URL programaticamente chamando extension.getURL() (en-US):

```js
browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
```

Permissões de API
-----------------

Permissões de API são especificadas como palavras-chave. Cada palavra-chave nomeia uma API WebExtension que a extensão gostaria de usar.

As seguintes palavras-chave estão atualmente disponíveis:

* `activeTab`
* `alarms`
* `background`
* `bookmarks`
* `browserSettings`
* `browsingData`
* `contentSettings`
* `contextMenus`
* `contextualIdentities`
* `cookies`
* `debugger`
* `dns`
* `downloads`
* `downloads.open`
* `find`
* `geolocation`
* `history`
* `identity`
* `idle`
* `management`
* `menus`
* `nativeMessaging`
* `notifications`
* `pageCapture`
* `pkcs11`
* `privacy`
* `proxy`
* `search`
* `sessions`
* `storage`
* `tabHide`
* `tabs`
* `theme`
* `topSites`
* `webNavigation`
* `webRequest`
* `webRequestBlocking`

Na maioria dos casos, a permissão apenas concede acesso à API, com as seguintes exceções:

* `tabs` dá acesso a partes privilagiadas da API `tabs`: `Tab.url`, `Tab.title` e `Tab.faviconUrl`. No Firefox, você também precisa `tabs` se quiser incluir `url` no parâmetro `queryInfo` para `tabs.query()` (en-US). O resto ad API `tabs` pode ser usado sem solicitar nenhuma permissão.
* `webRequestBlocking` permite usar o argumento "blocking", assim você pode modificar e cancelar requisições.
* `downloads.open` permite usar a API `downloads.open()` (en-US).
* `tabHide` permite usar a API `tabs.hide()` (en-US).
Permissão activeTab (aba ativa)
-------------------------------

Esta permissão é especificada como `"activeTab"`. Se uma extensão tem a permissão `activeTab`, quando o usuário interage com a extensão, a extensão recebe privilégios adicionais somente para a aba ativa.

"Interação do usuário" inclui:

* o usuário clica na ação da extensão, no navegador ou na página
* o usuário seleciona um item da extensão no menu de contexto
* o usuário ativa um atalho de teclado definido pela extensão

Os privilégios adicionais são:

* habilidade de injetar JavaScript ou CSS na aba programaticamente, usando `browser.tabs.executeScript` e `browser.tabs.insertCSS`
* acesso a essas partes privilegiadas da API *tabs* na aba atual: `Tab.url`, `Tab.title` e `Tab.faviconUrl`.

A intenção desta permissão é permitir que extensões executem um caso de uso comum, sem ter que lhes dar permissões poderosas demais. Muitas extensões querem "fazer alguma coisa com a página atual quando o usuário pede". Por exemplo, considere uma extensão que queira executar um script na página atual quando o usuário clicar em uma ação do navegador. Se a permissão `activeTab` não existisse, a extensão precisaria pedir a permissão de servidor `<all_urls>`. Mas isso daria à extensão mais poder que o necessário: ela poderia executar scripts em qualquer aba e quando quisesse, em vez de apenas na aba atual e somente em resposta a uma ação do usuário.

Note que você só pode ter acesso à aba ou dado que estava ali, quando a interação do usuário ocorreu (por exemplo, um clique do mouse). Quando a aba ativa muda para outra página, por exemplo devido a concluir o carregamento ou algum outro evento, a permissão não lhe concede mais acesso à aba.

Normalmente, a aba a qual foi concedido `activeTab` é somente a aba ativa atual, exceto em um caso. A API `menus` permite a uma extensão criar um item de menu que é exibido se o usuário abrir o menu de contexto sobre uma aba (ou seja, no elemento na lista de abas que permite ao usuário mudar de uma aba para outra). Se o usuário clicar em um item desses, a permissão `activeTab` é concedida para a aba em que o usuário clicou, mesmo que essa não seja a aba ativa no momento (de acordo com Firefox 63, Erro do Firefox 1446956).

Acesso à área de transferência
------------------------------

Existem duas permissões que permitem à extensão interagir com a área de transferência:

* `clipboardWrite`: escrever para a área de transferência usando `document.execCommand("copy")` ou `document.execCommand("cut")`
* `clipboardRead`: ler da área de transferência usando `document.execCommand("paste")`

Consulte Interação com a área de transferência (en-US) para saber todos os detalhes sobre isso.

Armazenamento ilimitado
-----------------------

A permissão `unlimitedStorage`:

* permite que extensões exceder qualquer quota imposta pela API `storage.local` (en-US)
* no Firefox, permite que extensões criem um banco de dados IndexedDB "persistente" (en-US), sem que o navegador peça ao usuário permissão no momento em que o banco de dados é criado.
Exemplos
--------

```json
 "permissions": ["\*://developer.mozilla.org/\*"]
```

Solicita acesso privilegiado a páginas sob developer.mozilla.org.

```json
  "permissions": ["tabs"]
```

Solicita acesso a partes privilegiadas da API `tabs`.

```json
  "permissions": ["\*://developer.mozilla.org/\*", "tabs"]
```

Solicita ambas as permissões anteriores.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


web_accessible_resources - Mozilla

web\_accessible\_resources
==========================

|  |  |
| --- | --- |
| Tipo | `Array` |
| Obrigatório | No |
| Exemplo |
```json
"web\_accessible\_resources": [
  "images/my-image.png"
]
```
 |

Descrição
---------

As vezes, você precisa empacotar recursos — por exemplo, imagens, HTML, CSS ou Javascript — com a sua extensão e fazê-la acessível para as páginas web.

Por exemplo, a extensão de exemplo Beastify substitui uma página por uma imagem de um animal selecionado pelo usuário. As imagens foram empacotadas com a extensão. Para fazer visível a imagem selecionada, a extensão adiciona elementos `<img>` cujo atributo `src` aponta para a imagem do animal. Para que a página da web possa carregar as imagens, elas devem estar disponíveis na extensão.

With the `web_accessible_resources` key, you list all the packaged resources that you want to make available to web pages. You specify them as paths relative to the manifest.json file.

Note that content scripts don't need to be listed as web accessible resources.

If an extension wants to use `webRequest` (en-US) to redirect a public URL (e.g., HTTPS) to a page that's packaged in the extension, then the extension must list the page in the `web_accessible_resources` key.

### Using web\_accessible\_resources

For example, suppose your extension includes an image file at images/my-image.png, like this:
```

my-extension-files/
    manifest.json
    my-background-script.js
    images/
        my-image.png
```

To enable a web page to use an `<img>` element whose `src` attribute points to this image, you would specify `web_accessible_resources` like this:

```json
"web\_accessible\_resources": ["images/my-image.png"]
```

The file is then available using a URL like:
```

moz-extension://<extension-UUID>/images/my-image.png"
```

`<extension-UUID>` is **not** your extension's ID. This ID is randomly generated for every browser instance. This prevents websites from fingerprinting a browser by examining the extensions it has installed.

**Nota:** In Chrome, an extension's ID is fixed. When a resource is listed in `web_accessible_resources`, it is accessible as `chrome-extension://<your-extension-id>/<path/to/resource>`.

The recommended approach to obtaining the URL of the resource is to use `runtime.getURL` passing the path relative to manifest.json, for example:

```js
browser.runtime.getURL("images/my-image.png");
// something like:
// moz-extension://944cfddf-7a95-3c47-bd9a-663b3ce8d699/images/my-image.png
```

This approach gives you have the correct URL regardless of the browser your extension is running on.

### Wildcards

`web_accessible_resources` entries can contain wildcards. For example, the following entry would also work to include the resource at "images/my-image.png":

```json
  "web\_accessible\_resources": ["images/\*.png"]
```

### Security

Note that if you make a page web-accessible, any website may link or redirect to that page. The page should then treat any input (POST data, for examples) as if it came from an untrusted source, just as a normal web page should.

Example
-------

```json
"web\_accessible\_resources": ["images/my-image.png"]
```

Make the file at "images/my-image.png" web accessible.

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


short_name - Mozilla

short\_name
===========

|  |  |
| --- | --- |
| Tipo | `String` |
| Obrigatório | No |
| Exemplo |
```json
"short\_name": "Minha Extensão"
```
 |

Nome abreviado (short name) da extensão. Se informado, ele será usado em contextos onde o campo de nome for muito longo. É recomendado que o nome abreviado não deva exceder 12 caracteres. Se o campo do nome abreviado não for incluído no manifest.json, então o nome será usado em vez disso e pode ser truncado.

Isto é um propriedade localizável.

Exemplo
-------

```json
"short\_name": "Minha Extensão"
```

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


Itens do menu de contexto - Mozilla

Itens do menu de contexto
=========================

Esta opção da interface de usuário adiciona um ou mais itens para o menu de contexto do navegador.Este é o menu de contexto disponível quando um usuário clica com o botão direito numa página web. As guias também podem ter menus de contexto, disponível através da API browser.menus.

![Example of content menu items added by a WebExtension, from the context-menu-demo example](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items/context_menu_example.png)

Você usaria essa opção para expor recursos relevantes para contextos específicos de navegadores ou páginas da web. Por exemplo, você poderia mostrar recursos para abrir um editor gráfico quando o usuário clica em uma imagem ou pode oferecer um recurso para salvar o conteúdo da página quando uma parte da página é selecionada. Você pode adicionar itens planos de menu, caixas de seleção, grupos de botões de rádio, e separadores para os menus. Quando um item de menu de contexto for adicionado usando `contextMenus.create` (en-US), é mostrado em todas as guias do navegador, mas você pode escondê-lo usando `contextMenus.remove` (en-US).

A lista inteira dos contextos suportados está disponível em `menus.ContextType` (en-US) e inclui contextos de fora de uma página web, como itens de favoritos na interface do navegador. Por exemplo, a extensão "Open bookmark in Container Tab" adiciona um item de menu que permite que o usuário abra a URL dos favoritos em uma nova guia de container:

![](/pt-BR/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items/extension_context_menu.png)

Especificando itens do menu de contexto
---------------------------------------

Você controla os itens do menu de contexto programaticamente, usando a API `contextMenus` (en-US). No entanto, você precisa requisitar a permissão `contextMenus` em seu manifest.json para poder tomar vantagem desta API.

```json
"permissions": ["contextMenus"]
```

Você pode então adicionar (e atualizar ou apagar) os itens do menu de contexto em seu script de "background" (segundo plano) da sua extensão. Para criar um item de menu, você especifica um id, seu título, e os menus de contexto em que ele deve aparecer:

```js
browser.contextMenus.create(
  {
    id: "log-selection",
    title: browser.i18n.getMessage("contextMenuItemSelectionLogger"),
    contexts: ["selection"],
  },
  onCreated,
);
```

Sua extensão então escuta os cliques nos itens do menu. As informações passadas sobre o item clicado, o contexto em que o clique ocorreu e os detalhes da guia em que o clique ocorreu podem ser usadas para chamar a funcionalidade de extensão apropriada.

```js
browser.contextMenus.onClicked.addListener(function(info, tab) {
  switch (info.menuItemId) {
    case "log-selection":
      console.log(info.selectionText);
      break;
    ...
  }
})
```

Ícones
------

Para mais detalhes sobre como criar ícones para usar no seu menu de contexto, veja Iconography na documentação Photon Design System.

Exemplos
--------

O repositório webextensions-examples no GitHub contém dois exemplos de extensões que implementam itens do menu de contexto:

* menu-demo adiciona muitos itens para o menu de contexto do navegador.
* context-menu-copy-link-with-types adiciona um item de menu de contexto aos links que copiam o URL do link para a área de transferência, como texto sem formatação e HTML avançado.


Notas de lançamento do Firefox para o desenvolvedor - Mozilla

Notas de lançamento do Firefox para o desenvolvedor
===================================================

Esta página fornece links para artigos "Firefox X para desenvolvedores" para cada versão do Firefox. Estas notas permitem ver que recursos foram adicionados e os erros eliminados em cada versão do Firefox.

1. Firefox 49 para desenvolvedores


Firefox 49 para desenvolvedores - Mozilla

Firefox 49 para desenvolvedores
===============================

Para testar estes novos recursos do Firefox,
Instale Firefox Developer Edition Firefox 49 foi lançado em 20 de Setembro de 2016. Este artigo faz uma lista das principais alterações não só para desenvolvedores web, mas também desenvolvedores Firefox e Gecko e de extensões.

Mudanças para desenvolvedores web
---------------------------------

### Ferramentas de desenvolvimento

* Erros de JavaScript registrados no console Agora com um link [Leia Mais] para ajuda complementar na depuração (Erro do Firefox 1179876).
* CSS autocompletar: mostra mais sugestões para o autocompletar
 (Erro do Firefox 1260419).
* O inspector de animação agora fornece informações do desempenho da animação nas ferramentas de desenvolvimento (Erro do Firefox 1254408).
* O menu de contexto do Inspector (en-US) foi reorganizado ser mais claro e fácil de usar (Erro do Firefox 1211613).
* O Inspector agora suporta sintaxe para valores de cores em `#RRGGBBAA` e `#RGBA` (Erro do Firefox 1271191).
* As ferramentas de desvenvolvedor deixa de exibir marcas de fechamento automático (tal como `<br>` e `<img>` como se eles tivessem uma tag de fechamento em páginas HTML ; o comportamento é inalteravel para páginas XHTML (Erro do Firefox 820926).
* Melhorias na acessibilidade!
    + A caixa de ferramenta faz um trabalho melhor em assegurar que o foco no teclado seja mais visível (Erro do Firefox 1242851).
    + Foram adicionados rótulos de acessibilidade a controles não marcados (Erro do Firefox 1242715).
    + Adicionada semântica de exibição de árvore adequada e navegação de teclado para a exibição de marcação do Inspetor (Erro do Firefox 1242694).
* O Monitor de Rede agora mostra uma coluna de Causa, onde fornece e indica o que causa de cada requerimento de rede específico (Erro do Firefox 1134073).
* Na *about:debugging* página de extesões, o botão de recarregar é o único abilitado para extensões temporárias. Será desabilitado para todas as outras extensões (Erro do Firefox 1273184).
* Na página Workers em *about:debbuging*, uma mensagem de alerta será exibida na seção Service Workers se o service workers for incompatíveil (en-US) com as configurações atuais do navegador (Erro do Firefox 1266415).
* *about:debugging* agora existe uma nova página de Tabs (en-US) disponível, quer fornece uma lista completa de todas abas abertas debugaveis na instancia do Firefox (Erro do Firefox 1266128).
* A opção *Desabilitar Cache* na Caixa de ferramentas de configurações avançadas foi renomeada para Desabilitar HTTP Cache, para clarear que isso afeta o cache do HTTP, e não Service Workers/o Cache API (bug(1253018)).
* O Inspector de armazenamento agora permite IndexedDB databases ser deletado através de seu próprio menu (Erro do Firefox 1205123), e mostrará uma mensagem de alerta se a IndexedDB poder ser deletada por alguma rasão (Se ainda existir conexão ativa, por exemplo) (Erro do Firefox 1268460).
### HTML

* Adicionado suporte para estes elementros: `<details>` e `<summary>` (Erro do Firefox 1226455).
* O `pattern` atribuido para `<input>` agora usa o parâmetro `'u'` no JavaScript base `RegExp` (Erro do Firefox 1227906).
* Para corresponder a uma mudança específica, de um valor inválido `kind` atributo do elemento `<track>` é agora tratado como `"metadata"` ao invés de`"subtitles"` (Erro do Firefox 1269712).
* O atributo `sandbox` do elemento `<iframe>` agora suporta os valores 'allow-popups-to-escape-sandbox' e 'allow-modals' (Erro do Firefox 1190641).
* Suporte para atributos microdata e a Microdata API foram removidas (Erro do Firefox 909633).
* O atributo `referrerpolicy` do elemento `<a>` agora suporta esses atributos `'no-referrer-when-downgrade`' e `'origin-when-cross-origin'` (Erro do Firefox 1178337).
* O `form` que é atributo do elemento `<label>` foi removido. A propriedade `HTMLLabelElement.form` (en-US) ainda existe, mas agora retorna o formulário na qual o controle do label's está associado , se houver um controle (e se esse controle for associado ao formulário) (Erro do Firefox 1268852).
### CSS

* Adicionado `background-position-x` (en-US) e `background-position-y` (en-US), que permite específicar e compensar separadamente a horizontal e a vertial para melhor posicionar a imagem de fundo; eles são compentes de `background-position` (en-US) (Erro do Firefox 550426).
* Adicionado suporte para `as tags round` e `space` para `background-repeat` (en-US) (Erro do Firefox 548372).
* no `background-clip`, as tags `text` são ativadas por padrão (Erro do Firefox 1264905).
* Adicionado suporte a cores específicas como o canal alpha usando 4- e 8-digitos CSS hex cor de valores (#RRGGBBAA e #RGBA) (Erro do Firefox 567283).
* A pseudo-class `:dir()` (en-US) foi desprezado (Erro do Firefox 859301).
* Em nossa implementação experimental (ainda não ativa por padrão) de `clip-path` (en-US), podemos agora interpolar entre valores `<basic-shape>` (en-US) (Erro do Firefox 1110460).
* Adicionado a `unidade de comprimento q` (en-US) (Erro do Firefox 1274526).
* A propiedade `text-align-last` (en-US) foi desprezada (Erro do Firefox 1039541).
* Adicionado suporte para `overflow-wrap`, substituindo `word-wrap` que ainda é suportado como nome alternativo (Erro do Firefox 955857).
* Nossa experiencia com a implementação do CSS Grids foi melhorado:
    + implementado `<percentage>` (en-US) para as propriedades `grid-gap` (en-US), `grid-row-gap` (en-US), e `grid-column-gap` (en-US) (Erro do Firefox 1266268).
    + Implementado suporte a layout grid layout para `align`, `justify-self` (en-US)`:baseline` e `last-baseline` (aka "baseline self-alignment") (Erro do Firefox 1221525).
    + Implementado alinhamento de conteúdo baseline de item em grid (Erro do Firefox 1256429).
* Nosso experimeto implementação de CSS Masks (en-US) foi melhorado:
    + A propiedade `mask-origin` (en-US) agora usa `border-box` ao invés de `padding-box` como valor inicial, para coincidir com a especificação (Erro do Firefox 1258286).
    + A propriedade `mask-repeat` (en-US) suporta os seguintes volumes: `space` e `round` values (Erro do Firefox 1258626).
    + Corrigido o problema que impedia o atributo `mask-position` (en-US) de ser animado (Erro do Firefox 1273804).
* O controle de preferências `text-emphasis` (en-US) foi removido, assim o suporte para esta propiedade não pode ser mais desabilitado (Erro do Firefox 1229609).
### JavaScript

* As armadilhas para ES2015 (ES6) `getPrototypeOf()` (en-US) e `setPrototypeOf()` (en-US) `Proxy` foram implementadas (Erro do Firefox 888969).
* O metodos ES2015 (ES6) `RegExp.prototype[@@match]()` (en-US), `RegExp.prototype[@@replace]()` (en-US), `RegExp.prototype[@@search]()` (en-US), e `RegExp.prototype[@@split]()` (en-US), e `RegExp[@@species]` (en-US) getter foram implementados (Erro do Firefox 887016).
* A versão obsoleta, `sem padrão nos argumentos de flags` do `String.prototype.``match`/`search`/`replace` foi remivida (Erro do Firefox 1108382).
* O comportamento do metodo `Date.parse()` quando analisam 2-digit years foi modificado para mais interoperável com o navegador Google Chrome (Erro do Firefox 1265136).
### Interfaces/APIs/DOM

#### DOM & HTML DOM

* O metodo `DOMTokenList.supports()` (en-US) foi adicionado (Erro do Firefox 1257849).
* O metodo `DOMTokenList.replace()` (en-US) foi adicionado (Erro do Firefox 1224186).
* O caractere principal `'?'` agora é ignorado no parâmetro do construtor `URLSearchParams()` (en-US) (Erro do Firefox 1268361).
* O valor retornado por `URL.origin`, `HTMLAnchorElement.origin` (en-US), e `HTMLAreaElement.origin` (en-US) para URL usando o `blob:` o esquema não está mais incorreto `null` mas em vez disso, a origem da URL formado pela remorção da tag `blob:` (Erro do Firefox 1270451).
* No modo de pre-renderização, a propriedade `Document.visibilityState` (en-US) agora retorna `'prerender'` (Erro do Firefox 1069772).
* A propriedade `Window.isSecureContext` foi implantada (Erro do Firefox 1162772).
* Os metodos DOM4 `ChildNode.before()` (en-US), `ChildNode.after()` (en-US), `ChildNode.replaceWith()` (en-US), `ParentNode.append()` (en-US) e `ParentNode.prepend()` (en-US) foram implementados (Erro do Firefox 911477).
* O metodo `TouchList.identifiedTouch()` foi removido (Erro do Firefox 1188539).
* Por padrão, a característica `scrollbars` `Window` é habilitado quando chamado `Window.open()` (en-US). Anteriormente, quanto era altamente recomendado ativar ele, pois não era padrão (Erro do Firefox 1257887).
* Adicionado o *metodo experimental* e *non-standard* do metodo `HTMLMediaElement.seekToNextFrame()` (en-US), que permite bucar quadro a quadro no conteúdo do vídeo (Erro do Firefox 1235301). Equanto você é incentivado a expertimentar, dessar forma você nos ajuda a entender o quão útil ele é, *não use ele em produção de código!*
* A propriedade `HTMLLabelElement.form` (en-US) agora retorna a forma com que o controle de label's foi assiciado, se houver um controle (e se esse controle for associado ao formulário). Anteriormente, labels eram diretamente associados com formulários usando essa propriedade (Erro do Firefox 1268852).
* Suporte ao paramtro third de `EventTarget.addEventListener()`, ou um `Boolean` ou a `EventListenerOptions` foi adicionado (Erro do Firefox 1266164 and Erro do Firefox 1266066).
* O volume do áudio relativo a `KeyboardEvent.key` (en-US) foram renomeados. `"VolumeDown"` é agora `"AudioVolumeDown"`, `"VolumeUp"` é agora `"AudioVolumeUp"`, e `"VolumeMute"` e agora `"AudioVolumeMute".` Isso traz Firefox para alinhamento com os últimos rascunhos de especificações de UI Events (Erro do Firefox 1272578). Veja Code values (en-US) para uma lista completa de possibilidades de códigos.
* Os códigos ateriormente referidos a `"MozHomeScreen"`, `"MozCameraFocusAdjust"`, e `"MozPhoneCall"` agora tem nomes oficiais na especificação UI Events: `"GoHome"`, `"CameraFocus"`, e `"Call"`. Firefox 49 foi atualizado para utilizar os novos nomes (Erro do Firefox 1272599). Veja Code values (en-US) para uma lista completa de possilidades de códigos
* O valor dos códigos `"Separator"` e `"MediaSkip"` foram removidos, por serem desatualizados e não utilizados (Erro do Firefox 1232919).
* Valor do código e a correspondencia dos códigos `"Hyper"` e `"Super"`foi adicionado para representar os modificadores de herança dos códigos (Erro do Firefox 1232919).
* *Duas teclas do teclado numérico multimídia foram adicionados*: `"Key11"` e `"Key12"` (Erro do Firefox 1232919).
* *Foram adicionados novos códigos para controle de audio*: `"AudioBassBoostToggle"`, `"AudioTrebleDown"`, e `"AudioTrebleUp"` (Erro do Firefox 123919).
* Adiconado código para controle do mocrofone: `"MicrophoneToggle"`, `"MicrophoneVolumeDown"`, `"MicrophoneVolumeUp"`, e `"MicrophoneVolumeMute"` (Erro do Firefox 123919).
* *Adicionado novo código de suporte a dispositivos de reconhecimento de fala*: "`SpeechCorrectionList"` e `"SpeechInputToggle"` (Erro do Firefox 1232919).
* *Nova tecla foi adicionada para suportar botões especiais em telefones*: `"AppSwitch"`, `"Call"`, `"CameraFocus"`, `"EndCall"`, `"GoBack"`, `"GoHome"`, `"HeadsetHook"`, `"LastNumberRedial"`, `"Notification"`, `"MannerMode"`, e `"VoiceDial"` (Erro do Firefox 1232919).
* Um novo botão de aplicação foi adicionado: `"LaunchContacts"` e `"LaunchPhone"` (Erro do Firefox 1232919).
* Adicionado novos códigos de suporte a dispositivos de TV: `"TV3DMode"`, `"TVAntennaCable"`, `"TVAudioDescription"`, `"TVAudioDescriptionMixDown"`, `"TVAudioDescriptionMixUp"`, `"TVContentsMenu"`, `"TVDataService"`, `"TVInput"`, `"TVInputComponent1"`, `"TVInputComponent2"`, `"TVInputComposite1"`, `"TVInputComposite2"`, `"TVInputHDMI1"`, `"TVInputHDMI2"`, `"TVInputHDMI3"`, `"TVInputHDMI4"`, `"TVInputVGA1"`, `"TVMediaContext"`, `"TVNetwork"`, `"TVNumberEntry"`, `"TVRadioService"`, `"TVSatellite"`, `"TVSatelliteBS"`, `"TVSatelliteCS"`, `"TVSatelliteToggle"`, `"TVTerrestrialAnalog"`, `"TVTerrestrialDigital"`, `"TVTimer"`, e `"DVR"` (Erro do Firefox 1232919).
* O código `"MediaSelect"` foi substituido pelo valor padrão `"LaunchMediaPlayer"` (Erro do Firefox 1272592).
* *Foram adicionados códigos adicionais para mídia-player*. São esses `"MediaAudioTrack"`, `"MediaSkipBackward"`, `"MediaSkipForward"`, `"MediaStepBackward"`, `"MediaStepForward"`, `"MediaTopMenu"`, `"NavigateIn"`, `"NavigateNext"`, `"NavigateOut"`, e `"NavigatePrevious"` (Erro do Firefox 1232919).

#### Canvas

* A propriedade `CanvasRenderingContext2D.filter` (en-US), que fornece suporte para adicionar foltros a uma canvas, agora é ativa por padrão e não precisa mais ser abilitado nas preferências (Erro do Firefox 1173545).

#### WebGL

* A extensão `EXT_color_buffer_float` (en-US) WebGL 2 (en-US) foi implementada (Erro do Firefox 1129332).
* O evento `webglcontextcreationerror`, que é criando quando a tentativa de criação de contexto do WebGL falha, foi implementado (Erro do Firefox 1271478). Use isso para ajudar a entender melhor, tanto para depuração quanto para o processamento de errros de produção.

#### IndexedDB

* Agora você pode renomear IndexedDB indexes; a propriedade `IDBIndex.name` (en-US) já não é mais de leitura-única (Erro do Firefox 1118028).
* Você também pode renomear `IDBObjectStore` (en-US)s; a propriedade `IDBObjectStore.name` (en-US) já não é de leitura-única (Erro do Firefox 1118028).

#### Service Workers e relatórios

* O Objeto Fetch API's `Response` agora implementa a propriedade `redirected` (en-US) , que indica se a resposta é para uma solicitação que foi redirecionada. Por favor ervise o relatório de segurança na documentação usanda anteriormente nessa propriedade (Erro do Firefox 1243792).
* Na API de Permissões (en-US), Firefox já não suporta a palavra `PermissionDescriptor` ti push (referido na especificação como `PushPermissionDescriptor`); Isso ocorre porque o Firefox depende de um sistema de cotas para controloar o status `userVisibleOnly`, e estava lançando um erro ao encontrar uma instância do `PushPermissionDescriptor` (Erro do Firefox 1266821). Com essa palavra removida, o Firefox simplismente ignora.

#### Streams de mídia

* Antigamente, era possível chamar `MediaDevices.getUserMedia()` (en-US) como requerimento ambos áudio e vídeo para ter sucesso nos casos em que o usuário tem apenas um dos dois tipos de hardware disponíveis . Isso foi fixado (Erro do Firefox 802326).
* Nas versões anteriores do Firefox, era possível chamar por `MediaDevices.getUserMedia()` (en-US) que solicita tando audio quanto vídeo para ter êxito mesmo que o usuário tenha negado acesso a um, mas não a ambos os dispositivos de correspondência. Isso foi fixado (Erro do Firefox 802326). Isso envolve pequenas alterações na interface de usuários, para remover a opção para escolher "sem áudio" ou "Sem vídeo" quando o usuário é solicitado para as permissões.
* O metodo `MediaStream.getTrackById()` (en-US) foi implantado (Erro do Firefox 1208390).

#### WebRTC

* O metodo `RTCPeerConnection.addTrack()` (en-US) foi atualizado para permitir tracks sue não são componentes dos stream especificados a serem adicionados à conexão. Ao invés, os streams são usados para agrupar tracks na extremidade receptora da conexão (Erro do Firefox 1271669).

#### Novas APIs

* A API `PerformanceObserver` (en-US) agpra é ativa por padrão no Nightly. Isso não é atio por padrão em outras versõs do Firefox 49 (Erro do Firefox 1271487).

#### Outras

* `XMLHttpRequest.getResponseHeader()` (en-US) e `XMLHttpRequest.getAllResponseHeaders()` (en-US) retornar cabeçalhos vazios caso a preferência `network.http.keep_empty_response_headers_as_empty_string` esta configurado para `true` (Erro do Firefox 669259).
* O Firefox OS-apenas API Banco de Dados foi removida (Erro do Firefox 1261009).
* A API de Tela Cheia (en-US) manipulador de eventos `Document.onfullscreenchange` (en-US) e `Document.onfullscreenerror` (en-US) foram removidos de `Element` como nunca foram usados la; As versões de prefixo desses manipuladores de eventos foram mantidas lá para fins de compatibilidade, Contudo (Erro do Firefox 1270386). Observe que ele não é ativado por padrão, mas está atrás da preferência `full-screen-api.unprefix.enabled` (Erro do Firefox 1268749).
* A propriedade obsoleta `Document.mozFullScreen` (en-US) não foi pré-fixada `Document.fullscreen` Erro do Firefox 1269157}. Perceba que ela não é ativa por padrão nas preferencias the `full-screen-api.unprefix.enabled` (Erro do Firefox 1268749).
* A propriedade leitor `Document.fullscreenElement` (en-US) e `Document.fullscreenEnabled` (en-US) deixa de lançar exceção se hover tentativa de alterar o seu valor; ao invés disso, o novo valor é ignorado e a função setter é uma no-op (Erro do Firefox 1269798).
* Qualquer tipode de dado pode ser agora recuperado da área de tranferência usada `DataTransfer.getData()` (en-US): anteriormente, apenas alguns tipos de dados do tipo MIME eram suportados Erro do Firefox 860857.
* Nossa implementação da API da cronometragrm de frames, consistindo nas duas interfaces `PerformanceCompositeTiming` e `PerformanceRenderTiming`, foram removidas pois as especificações foram totalmente reescritas (Erro do Firefox 1271846).
* Para especificações correspondentes, a propriedade `VTTCue.positionAlign` (en-US) agora retorna um `PositionAlign` enum em vez de `Align` enum (Erro do Firefox 1276129).
* A parte de síntese da API Web Speech (en-US) agora é ativo por padrão (Erro do Firefox 1268633).
* A API Timeline de performace agora está disponível de padrão no Nightly (embrora não no Aurora, Beta ou Release).
* O evento `install`, e o `Window.oninstall` (en-US) manipulador de evento, são agora suportado por Web Manifests (Erro do Firefox 1265279).
* Quando usar o metodo `AudioContext.createPeriodicWave()` (en-US) de Web Audio API, você pode específicar se a onda periódica resultante deve ser normalizada incluindo um objeto de dicionário como o terceiro parâmetro, que inclui um único parâmetro — `{disableNormalization: true}` (Erro do Firefox 1265405).
* Na APIWebVTT, `VTTCue.positionAlign` (en-US) retorna corretamente um `PositionAlignSetting` enum conforme a especificação; anteriormente ele retornava um `AlignSetting` enum (Erro do Firefox 1276129).
* A parte de síntese de fala da API Web Speech agora é habilitado por padrão em todos os navegadores desktop (Erro do Firefox 1268633).
* O contrutor de API Web Animations (en-US) `Animation()` (en-US) agora aceita null na timeline (Erro do Firefox 1096776).
### MathML

*Sem mudanças.*

### SVG

* Removido o suporte por ser considerador obsoleto os seguintes elementos: `<altGlyph>`, `<altGlyphDef>` e `<altGlyphItem>` (Erro do Firefox 1260032).
### Audio/Video

*Sem mudanças.*

HTTP
----

* `O diretiva Cache-Control: immutable` foi implantada (Erro do Firefox 1267474). Veja também essa postagem no blog para mais informações.
Networking
----------

* A implementação do Auto-configuração de Proxy (PAC) foi atualizada. Agora `weekdayRange`, `dateRange`, e `timeRange` suportam "intervalos invertidos", por exempo, `weekdayRange("SAT", "MON")` avaliare `true` se o dia atual é Saturday, Sunday, ou Monday (Erro do Firefox 1251332).
Segurança
---------

* A propriedade `Window.isSecureContext`, indica se o contexto é capaz de usar recursos que exigem contextos de segurança (en-US), foi implementado (Erro do Firefox 1162772).
Compatilibidade
---------------

A fim de melhorar a compatilidade com o conteúdo existente, Firefox agora aceita algumas propriedades e atributos do webkit.

* As propriedades a seguir também trabalham com prefixo -webkit:
    + `-webkit-align-items` (en-US)
    + `-webkit-align-content` (en-US)
    + `-webkit-align-self` (en-US)
    + `-webkit-animation` (en-US)
    + `-webkit-animation-delay` (en-US)
    + `-webkit-animation-direction` (en-US)
    + `-webkit-animation-duration` (en-US)
    + `-webkit-animation-fill-mode` (en-US)
    + `-webkit-animation-iteration-count` (en-US)
    + `-webkit-animation-name` (en-US)
    + `-webkit-animation-play-state` (en-US)
    + `-webkit-animation-timing-function` (en-US)
    + `-webkit-backface-visibility` (en-US)
    + `-webkit-background-clip` (en-US)
    + `-webkit-background-origin` (en-US)
    + `-webkit-background-size` (en-US)
    + `-webkit-border-bottom-left-radius` (en-US)
    + `-webkit-border-bottom-right-radius` (en-US)
    + `-webkit-border-image` (en-US)
    + `-webkit-border-top-left-radius` (en-US)
    + `-webkit-border-top-right-radius` (en-US)
    + `-webkit-border-radius` (en-US)
    + `-webkit-box-shadow` (en-US)
    + `-webkit-filter` (en-US)
    + `-webkit-flex` (en-US)
    + `-webkit-flex-basis` (en-US)
    + `-webkit-flex-direction` (en-US)
    + `-webkit-flex-flow` (en-US)
    + `-webkit-flex-grow` (en-US)
    + `-webkit-flex-shrink` (en-US)
    + `-webkit-flex-wrap` (en-US)
    + `-webkit-justify-content` (en-US)
    + `-webkit-order` (en-US)
    + `-webkit-perspective` (en-US)
    + `-webkit-perspective-origin` (en-US)
    + `-webkit-text-size-adjust` (en-US)
    + `-webkit-transform` (en-US)
    + `-webkit-transform-origin` (en-US)
    + `-webkit-transform-style` (en-US)
    + `-webkit-transition` (en-US)
    + `-webkit-transition-delay` (en-US)
    + `-webkit-transition-duration` (en-US)
    + `-webkit-transition-property` (en-US)
    + `-webkit-transition-timing-function` (en-US)
    + `-webkit-user-select` (en-US)
* As propriedades a seguir correspondem à propriedade prefixa equivalente
    + `-webkit-box-flex` (en-US)
    + `-webkit-box-ordinal-group` (en-US)
    + `-webkit-box-orient` (en-US)
    + `-webkit-box-align` (en-US)
    + `-webkit-box-pack` (en-US)
* Para valores `<image>`:
    + As funções a seguir correspondem aos seus equivalentes não predefinidos: `-webkit-linear-gradient()` (en-US), `-webkit-radial-gradient()` (en-US), `-webkit-repeating-linear-gradient()` (en-US), e `-webkit-repeating-radial-gradient()` (en-US).
    + O desatualizado `-webkit-gradient` é suportado (e traduzindo para um gradiente regular)
* Os seguintes valores `display` foram traduzidos:
    + `-webkit-box` to `-moz-box`
    + `-webkit-flex` to `flex`
    + `-webkit-inline-box` to `inline-flex`
    + `-webkit-inline-flex` to `-moz-inline-flex`
* As seguintes propriedades são suportadas ( E não mapeia para qualquer equivalente não predefinido):
    + `-webkit-text-fill-color` (en-US)
    + `-webkit-text-stroke-color` (en-US)
    + `-webkit-text-stroke-width` (en-US)
    + `-webkit-text-stroke` (en-US)
* A interface `WebKitCSSMatrix` (en-US) é um nome de `DOMMatrix` (en-US)
* Os seguintes recursos de consulta de mídia foram implementados:
    + `-webkit-min-device-pixel-ratio` é um nome para `min-resolution` com o mesmo valor em (em `dppx)`, embora este recurso seja disabilitado por padrão (atras de preferências no about:config `layout.css.prefixes.device-pixel-ratio-webkit`)
    + `-webkit-max-device-pixel-ratio` é um nome de `max-resolution` para o mesmo valor (em `dppx`); essa característica é destivada por padrão, atras da mesma preferência no about:config
    + `-webkit-transform-3d` sempre combinando, indicando suporte a transformações 3D.
Mudanças para extensões e desenvolvedores Mozilla
-------------------------------------------------

### Extensões WEB

* Suporte a `history` (en-US) foi adicionado. Isso fornece acesso a histórico do navegador, com metodos disponíveis para pesquisar no histórico, obtendo informações sobre páginas visitanas anteriormente, e adicionando e removendo entradas no históricos.
* Adicionado o metodo `tabs.removeCSS()` (en-US) para aba API. Esse metodo permite remover o CSS que foi anteriormente injetado por chamada `tabs.insertCSS()` (en-US).
### Interfaces

* No `EventTarget.addEventListener()`, o valor `mozSystemGroup`, ativa apenas com o código rodando no XBL ou no Firefox's chrome, e um `Boolean` que indica se o ouvinte foi adicionado ao grupo do sistema. (Erro do Firefox 1274520)
### Outros

*Sem mudanças!.*

Outras versões
--------------

* Firefox 48 for developers (en-US)
* Firefox 47 for developers (en-US)
* Firefox 46 for developers (en-US)
* Firefox 45 for developers (en-US)
* Firefox 44 for developers (en-US)
* Firefox 43 for developers (en-US)
* Firefox 42 for developers (en-US)
* Firefox 41 for developers (en-US)
* Firefox 40 for developers (en-US)
* Firefox 39 for developers (en-US)
* Firefox 38 for developers (en-US)
* Firefox 37 for developers (en-US)
* Firefox 36 for developers (en-US)
* Firefox 35 for developers (en-US)
* Firefox 34 for developers (en-US)
* Firefox 33 for developers (en-US)
* Firefox 32 for developers (en-US)
* Firefox 31 for developers (en-US)
* Firefox 30 for developers (en-US)
* Firefox 29 for developers (en-US)
* Firefox 28 for developers (en-US)
* Firefox 27 for developers (en-US)
* Firefox 26 for developers (en-US)
* Firefox 25 for developers (en-US)
* Firefox 24 for developers (en-US)
* Firefox 23 for developers (en-US)
* Firefox 22 for developers (en-US)
* Firefox 21 for developers (en-US)
* Firefox 20 for developers (en-US)
* Firefox 19 for developers (en-US)
* Firefox 18 for developers (en-US)


Zoom de página inteira - Mozilla

Zoom de página inteira
======================

Zoom de página inteira (ou apenas fullzoom) é um novo recurso do Firefox 3.

### Exemplo (XUL:browser)

O exemplo a seguir demonstra o uso da janela atual do navegador. Esse é o uso típico de uma extensão do Firefox.
```

var zoom = ZoomManager.getZoomForBrowser(gBrowser.selectedBrowser);
ZoomManager.enlarge();
ZoomManager.setZoomForBrowser(gBrowser.selectedBrowser, ZoomManager.MIN);
```

### Exemplo (XUL:iframe)

Nota: Isso provavelmente está desatualizado.

Você pode usar o recurso fullZoom para um XUL:iframe também. No entanto, como um iframe não tem uma propriedade markupDocumentViewer, precisamos obtê-la primeiro:
```

var zoom = 1.5;
var iframe = document.getElementById("authorFrame");
var contViewer = iframe.docShell.contentViewer;
var docViewer = contViewer.QueryInterface(Components.interfaces.nsIMarkupDocumentViewer);
docViewer.fullZoom = zoom;
```

### References

* Extensão de zoom de página por Ted Mielczarek fullpagezoom.xpi para os últimos Firefox 3.0 nightlies
* Glazoom extension por Daniel Glazman para Firefox 3.0
* O bugzilla bug sobre fullZoom.
* `nsIMarkupDocumentViewer` documentação da interface.