Extensões de depuração

As extensões podem aproveitar os mesmos benefícios de depuração que o Chrome DevTools oferece para páginas da Web, mas têm propriedades de comportamento únicas. Para se tornar um depurador mestre de extensão, é necessário entender esses comportamentos, saber como os componentes de extensão funcionam uns com os outros e onde identificar os bugs. Este tutorial fornece aos desenvolvedores uma compreensão básica da depuração de extensões.

Localizar os registros

As extensões são feitas de muitos componentes diferentes, e esses componentes têm responsabilidades individuais. Faça o download de uma extensão corrompida aqui para começar a localizar registros de erros para diferentes componentes de extensão.

Script em segundo plano

Navegue até a página de gerenciamento das extensões do Chrome em chrome://extensions e verifique se o modo de desenvolvedor está ativado. Clique no botão Load Descompactado e selecione o diretório de extensão corrompido. Depois que a extensão é carregada, ela precisa ter três botões: Details, Remove e Errors em letras vermelhas.

Imagem mostrando o botão de erro na página de gerenciamento de extensões

Clique no botão Erros para visualizar o registro de erros. O sistema de extensões encontrou um problema no script em segundo plano.

Uncaught TypeError: Cannot read property 'addListener' of undefined

Página de gerenciamento de extensões mostrando o erro de script em segundo plano

Além disso, o painel do Chrome DevTools pode ser aberto para o script em segundo plano selecionando o link azul ao lado de Inspecionar visualizações.

DevTools mostrando o erro do script em segundo plano

Volte ao código.

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()]
    }]);
  });
});

O script em segundo plano está tentando detectar o evento onInstalled, mas o nome da propriedade requer um "I" maiúsculo. Atualize o código para refletir a chamada correta, clique no botão Clear all no canto superior direito e recarregue a extensão.

Pop-up

Agora que a extensão é inicializada corretamente, outros componentes podem ser testados. Atualize a página ou abra uma nova guia e navegue até qualquer página em developer.chrome.com, abra o pop-up e clique no quadrado verde. E... nada acontece.

Volte para a página de gerenciamento de extensões. O botão Erros reaparecerá. Clique nele para ver o novo registro.

Uncaught ReferenceError: tabs is not defined

Página de gerenciamento de extensões mostrando um erro pop-up

Os erros de pop-up também podem ser visualizados inspecionando-o.

Erro pop-up exibido no DevTools

O erro tabs is undefined diz que a extensão não sabe onde injetar o script de conteúdo. Para corrigir isso, chame o método tabs.query() e selecione a guia ativa.

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

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

  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;'});
    });
  };

Atualize o código, clique no botão Clear all no canto superior direito e recarregue a extensão.

Script de conteúdo

Atualize a página, abra o pop-up e clique na caixa verde. E... não, o fundo ainda não mudou de cor! Volte para a página de gerenciamento de extensões e o botão Errors não vai aparecer. O culpado provável é o script de conteúdo, que é executado na página da Web.

Abra o painel DevTools da página da Web que a extensão está tentando alterar.

Erro de extensão exibido no console da página da Web

Apenas erros de tempo de execução, console.warning e console.error, serão registrados na página de gerenciamento de extensões.

Para usar o DevTools no script de conteúdo, clique na seta suspensa ao lado de top e selecione a extensão.

ReferenceError não capturado: as guias não estão definidas

O erro diz que color não está definido. A extensão não pode transmitir a variável corretamente. Corrija o script injetado para transmitir a variável de cor para o código.

  {code: 'document.body.style.backgroundColor = "' + color + '";'});

Guias de extensão

Os registros das páginas de extensão exibidas como uma guia, como páginas de substituição e opções de página inteira, podem ser encontrados no console da página da Web e na página de gerenciamento de extensões.

Monitorar solicitações de rede

O pop-up geralmente faz todas as solicitações de rede necessárias antes que mesmo os desenvolvedores mais rápidos possam abrir o DevTools. Para visualizar essas solicitações, atualize a partir do painel de rede. Ele vai recarregar o pop-up sem fechar o painel do DevTools.

Atualize no painel de rede para conferir as solicitações pop-up de rede

Declarar permissões

Embora as extensões tenham recursos semelhantes aos das páginas da Web, elas geralmente precisam de permissão para usar determinados recursos, como cookies, armazenamento e XMLHttpRequsts entre origens. Consulte o artigo de permissões e as APIs do Chrome disponíveis para garantir que uma extensão esteja solicitando as permissões corretas no manifesto.

  {
    "name": "Broken Background Color",
    "version": "1.0",
    "description": "Fix an Extension!",
    "permissions": [
      "activeTab",
      "declarativeContent",
      "storage"
    ],
    "options_page": "options.html",
    "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
  }

Próximas etapas

Para mais informações sobre a depuração de extensões, assista a Desenvolvimento e depuração. Saiba mais sobre o Chrome Devtools na documentação.