Novidades do Chrome 116 para extensões

O Chrome 116 já está disponível na versão Beta e inclui muitas atualizações interessantes para desenvolvedores de extensões do Chrome. Vamos conferir as novidades.

Abrir um painel lateral de maneira programática

O painel lateral é um dos recursos mais solicitados nas extensões do Chrome e está disponível no Chrome desde a versão 114. Depois de lançar a API Side Panel, um dos primeiros feedbacks que recebemos foi que os desenvolvedores queriam uma maneira de abrir um painel lateral de forma programática. E aqui está: o chrome.sidePanel.open está na versão Beta. Ele pode ser usado para abrir o painel lateral da extensão de forma programática em resposta a uma interação do usuário, como um clique no menu de contexto:

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === 'openSidePanel') {
    // This will open the panel in all the pages on the current window.
    chrome.sidePanel.open({ windowId: tab.windowId });
  }
});

Suporte a WebSocket em service workers

O suporte a WebSocket é fundamental para muitas extensões que planejam migrar para o Manifest V3. O Chrome 116 melhora ainda mais o suporte a WebSockets em service workers, já que toda a atividade do WebSocket vai redefinir o timer de inatividade de 30 segundos do service worker. Isso significa que, enquanto o WebSocket estiver ativo, o worker de serviço vai continuar ativo.

Você pode usar isso para implementar um mecanismo de manutenção, garantindo que o worker do serviço permaneça ativo enquanto você aguarda mensagens do servidor, mesmo que demore mais de 30 segundos até a próxima mensagem chegar:

function keepAlive() {
  const keepAliveIntervalId = setInterval(
    () => {
      if (webSocket) {
        webSocket.send('keepalive');
      } else {
        clearInterval(keepAliveIntervalId);
      }
    },
    // It's important to pick an interval that's shorter than 30s, to
    // avoid that the service worker becomes inactive.
    20 * 1000
  );
}

Confira nosso novo guia e exemplo sobre WebSockets para mais detalhes.

Keepalive robusto para service workers

Falando em ciclo de vida do service worker, outra atualização importante foi lançada: keepalive forte para APIs que exigem interação do usuário. As APIs que exigem uma interação do usuário terão keepalives "fortes" para workers de serviço de extensão (ou seja, permitem que o worker demore mais de 5 minutos nessa tarefa):

Gravação de áudio e vídeo em segundo plano

Outra lacuna entre o Manifest V2 e o Manifest V3 foi fechada: agora é possível gravar áudio e vídeo em segundo plano usando tabCapture e documentos fora da tela. Use a API chrome.tabCapture em um worker de serviço para receber um ID de stream após um gesto do usuário. Isso pode ser transmitido para um documento fora da tela para iniciar a gravação.

Confira nosso guia atualizado sobre tabCapture para saber como ele funciona ou, para conferir um exemplo funcional, consulte a amostra Tab Capture - Recorder.

Nova API: runtime.getContexts()

A nova API runtime.getContexts() permite buscar informações sobre contextos ativos associados às suas extensões. Por exemplo, é possível usá-lo para verificar se há um documento fora da tela ativo:

const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
    (c) => c.contextType === 'OFFSCREEN_DOCUMENT'
  );

Novo motivo fora da tela: GEOLOCATION

geolocation foi adicionado como outro motivo válido para usar um documento fora da tela. Confira nosso guia como usar a geolocalização para saber como conseguir a localização geográfica da extensão usando a API Offscreen.

chrome.action.setBadgeText()

O action.setBadgeText foi atualizado para resolver uma inconsistência entre o Manifest V2 e o Manifest V3. Transmitir uma string vazia ou null para action.setBadgeText vai limpar o texto do selo da guia especificada e usar o texto padrão do selo.

action.setBadgeText({tabId: tabId, text: ''});

Resumo: mais uma etapa para o Manifest V3

Com o suporte aprimorado de vida útil do Service Worker e a API TabCapture atualizada, continuamos avançando na nossa meta de fechar a lacuna de recursos entre o Manifest V2 e o V3. Confira o status atual na página de problemas conhecidos.