Como começar

As extensões são feitas de componentes diferentes, mas coesos. Os componentes podem incluir planos de fundo scripts, scripts de conteúdo, uma página de opções, elementos da interface e vários arquivos de lógica. Os componentes de extensão são criados com tecnologias de desenvolvimento da Web: HTML, CSS e JavaScript. Um os componentes da extensão dependerão da funcionalidade e podem não exigir todas as opções.

Este tutorial criará uma extensão que permite ao usuário alterar a cor de fundo de qualquer em developer.chrome.com. Ele usará muitos componentes principais para dar uma introdução demonstração de suas relações.

Para começar, crie um novo diretório para armazenar os arquivos da extensão.

A extensão concluída pode ser encontrada aqui.

Criar o manifesto

As extensões começam com o manifesto. Crie um arquivo chamado manifest.json e inclua o código a seguir.

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "manifest_version": 2
}

O diretório que contém o arquivo de manifesto pode ser adicionado como uma extensão no modo de desenvolvedor em seu o estado atual.

  1. Abra a página "Gerenciamento de extensões" em chrome://extensions.
    • Para abrir a página "Gerenciamento de extensões", clique no menu do Google Chrome, passe o cursor sobre Clique em Mais ferramentas e selecione Extensões.
  2. Ative o modo de desenvolvedor clicando no botão ao lado de Modo de desenvolvedor.
  3. Clique no botão LOAD UNPACKED e selecione o diretório da extensão.

Carregar extensão

Pronto! A extensão foi instalada. Como nenhum ícone foi incluído do manifesto, um ícone genérico na barra de ferramentas será criado para a extensão.

Adicionar instrução

Embora a extensão tenha sido instalada, ela não tem instruções. Introduzir um script de contexto criando um arquivo chamado background.js e colocando-o dentro do diretório de extensão.

Scripts de segundo plano e muitos outros componentes importantes precisam ser registrados no manifesto. Registrar um script em segundo plano no manifesto informa à extensão qual arquivo referenciar e como esse arquivo deve se comportar.

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "manifest_version": 2
}

A extensão agora sabe que inclui um script de segundo plano não persistente e vai verificar o para eventos importantes que ele precisa detectar.

Esta extensão precisará de informações de uma variável persistente assim que for instalada. Comece incluindo um evento de detecção de runtime.onInstalled no script de segundo plano. Dentro do listener onInstalled, a extensão definirá um valor usando a API storage. Isso permitirá vários componentes de extensão para acessar e atualizar esse valor.

chrome.runtime.onInstalled.addListener(function() {
  chrome.storage.sync.set({color: '#3aa757'}, function() {
    console.log("The color is green.");
  });
});

A maioria das APIs, incluindo a API storage, deve ser registrada no campo "permissions" no o manifesto para que a extensão os use.

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "permissions": ["storage"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "manifest_version": 2
}

Volte para a página de gerenciamento de extensão e clique no link Atualizar. Um novo campo, Inspecionar de visualização, fica disponível com um link azul: página de plano de fundo.

Inspecionar visualizações

Clique no link para visualizar o registro do console do script de plano de fundo, "The color is green."

Apresentar uma interface do usuário

As extensões podem ter várias formas de uma interface do usuário, mas esta usará um pop-up. Crie e adicione um arquivo chamado popup.html ao diretório. Isso usa um botão para mudar a cor de fundo.

<!DOCTYPE html>
<html>
  <head>
    <style>
      button {
        height: 30px;
        width: 30px;
        outline: none;
      }
    </style>
  </head>
  <body>
    <button id="changeColor"></button>
  </body>
</html>

Assim como no script de plano de fundo, esse arquivo precisa ser designado como um pop-up no manifesto em page_action

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "permissions": ["storage"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "page_action": {
    "default_popup": "popup.html"
  },
  "manifest_version": 2
}

A designação para ícones da barra de ferramentas também está incluída em page_action no campo default_icons. Faça o download da pasta de imagens aqui, descompacte e coloque-a no diretório da extensão. Atualizar o manifesto para que a extensão saiba como usar as imagens.

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "permissions": ["storage"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "page_action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/get_started16.png",
      "32": "images/get_started32.png",
      "48": "images/get_started48.png",
      "128": "images/get_started128.png"
    }
  },
  "manifest_version": 2
}

As extensões também exibem imagens na página de gerenciamento de extensões, no aviso de permissões e Favicon. Essas imagens são designadas no manifesto em icons.

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "permissions": ["storage"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "page_action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/get_started16.png",
      "32": "images/get_started32.png",
      "48": "images/get_started48.png",
      "128": "images/get_started128.png"
    }
  },
  "icons": {
    "16": "images/get_started16.png",
    "32": "images/get_started32.png",
    "48": "images/get_started48.png",
    "128": "images/get_started128.png"
  },
  "manifest_version": 2
}

Se a extensão for atualizada nessa etapa, ela incluirá um ícone em escala cinza, mas não conterá quaisquer diferenças de funcionalidade. Como page_action é declarado no manifesto, cabe ao para informar ao navegador quando o usuário pode interagir com popup.html.

Adicione as regras declaradas ao script em segundo plano com a API declarativeContent no evento de listener runtime.onInstalled.

chrome.runtime.onInstalled.addListener(function() {
  chrome.storage.sync.set({color: '#3aa757'}, function() {
    console.log('The color is green.');
  });
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([{
      conditions: [new chrome.declarativeContent.PageStateMatcher({
        pageUrl: {hostEquals: 'developer.chrome.com'},
      })
      ],
          actions: [new chrome.declarativeContent.ShowPageAction()]
    }]);
  });
});

A extensão precisará de permissão para acessar a API declarativeContent no manifesto.

{
  "name": "Getting Started Example",
...
  "permissions": ["declarativeContent", "storage"],
...
}

Pop-up

O navegador agora mostrará um ícone de ação da página em cores na barra de ferramentas do navegador quando os usuários navegarem para um URL que contém "developer.chrome.com". Quando o ícone estiver colorido, os usuários poderão clicar nele para visualize o pop-up.html.

A última etapa da interface pop-up é adicionar cor ao botão. Crie e adicione um arquivo chamado popup.js pelo código abaixo para o diretório da extensão.

let changeColor = document.getElementById('changeColor');

chrome.storage.sync.get('color', function(data) {
  changeColor.style.backgroundColor = data.color;
  changeColor.setAttribute('value', data.color);
});

Esse código usa o botão do popup.html e solicita o valor da cor do armazenamento. Em seguida, aplica a cor como o plano de fundo do botão. Inclua uma tag script para popup.js em popup.html.

<!DOCTYPE html>
<html>
...
  <body>
    <button id="changeColor"></button>
    <script src="popup.js"></script>
  </body>
</html>

Atualize a extensão para visualizar o botão verde.

Lógica da camada

Agora a extensão sabe que o pop-up deve estar disponível para os usuários em developer.chrome.com e exibe um botão colorido, mas precisa de lógica para mais interação do usuário. Atualizar popup.js para inclua o código a seguir.

let changeColor = document.getElementById('changeColor');
...
changeColor.onclick = function(element) {
  let color = element.target.value;
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.executeScript(
        tabs[0].id,
        {code: 'document.body.style.backgroundColor = "' + color + '";'});
  });
};

O código atualizado adiciona um evento onclick ao botão, o que aciona um evento injetado de forma programática script de conteúdo. Dessa forma, a cor do plano de fundo da página fica com a mesma cor do botão. Usando a injeção programática permite scripts de conteúdo invocados pelo usuário, em vez de inserir automaticamente o código em páginas da Web.

O manifesto precisará da permissão activeTab para conceder à extensão acesso temporário aos a API tabs. Isso permite que a extensão chame tabs.executeScript.

{
  "name": "Getting Started Example",
...
  "permissions": ["activeTab", "declarativeContent", "storage"],
...
}

A extensão agora está totalmente funcional. Atualize a extensão, atualize esta página, abra o pop-up e clique no botão para deixá-lo verde! No entanto, alguns usuários podem querer alterar o plano de fundo para um de uma cor diferente.

Oferecer opções aos usuários

Atualmente, a extensão só permite que os usuários mudem o plano de fundo para verde. Incluir opções oferece aos usuários mais controle sobre a funcionalidade da extensão, personalizando ainda mais sua navegação do usuário.

Comece criando um arquivo no diretório chamado options.html e inclua o código a seguir.

<!DOCTYPE html>
<html>
  <head>
    <style>
      button {
        height: 30px;
        width: 30px;
        outline: none;
        margin: 10px;
      }
    </style>
  </head>
  <body>
    <div id="buttonDiv">
    </div>
    <div>
      <p>Choose a different background color!</p>
    </div>
  </body>
  <script src="options.js"></script>
</html>

Em seguida, registre a página de opções no manifesto,

{
  "name": "Getting Started Example",
  ...
  "options_page": "options.html",
  ...
  "manifest_version": 2
}

Atualize a extensão e clique em DETALHES.

Inspecionar visualizações

Role a página de detalhes para baixo e selecione Opções de extensão para ver a página de opções, aparecerão em branco no momento.

Opções de extensão

A última etapa é adicionar a lógica de opções. Crie um arquivo chamado options.js no diretório da extensão pelo código a seguir.

let page = document.getElementById('buttonDiv');
const kButtonColors = ['#3aa757', '#e8453c', '#f9bb2d', '#4688f1'];
function constructOptions(kButtonColors) {
  for (let item of kButtonColors) {
    let button = document.createElement('button');
    button.style.backgroundColor = item;
    button.addEventListener('click', function() {
      chrome.storage.sync.set({color: item}, function() {
        console.log('color is ' + item);
      })
    });
    page.appendChild(button);
  }
}
constructOptions(kButtonColors);

Quatro opções de cor são fornecidas e geradas como botões na página de opções com o evento "onclick" os listeners. Quando o usuário clica em um botão, ele atualiza o valor da cor no escopo global da extensão armazenamento. Como todos os arquivos da extensão extraem as informações de cor do armazenamento global precisam ser atualizados.

Próximos passos

Parabéns! O diretório agora tem uma extensão do Chrome totalmente funcional, embora simplista.

A seguir

  • A Visão geral da extensão do Chrome faz backup e apresenta muitos detalhes sobre a A arquitetura de extensões em geral e alguns conceitos específicos que os desenvolvedores precisam conhecer com
  • Saiba mais sobre as opções disponíveis para depurar extensões no tutorial de depuração.
  • As extensões do Google Chrome têm acesso a APIs poderosas que vão além das disponíveis na Web aberta. A biblioteca chrome.* documentação das APIs mostrará em detalhes cada API.
  • O Guia do desenvolvedor possui dezenas de links adicionais para documentos relevantes para criação avançada de extensões.