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.

Sebastian benz
Sebastian Benz

Abrir um painel lateral de forma programática

O painel lateral foi 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 programaticamente um painel lateral. Aqui está: o chrome.sidePanel.open está na versão Beta. Você pode usá-lo para abrir o painel lateral da extensão de maneira 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 WebSocket nos service workers, porque todas as atividades do WebSocket redefinirão o timer de inatividade do service worker de 30 segundos. Isso significa que, enquanto seu WebSocket estiver ativo, o service worker permanecerá ativo.

É possível usar isso para implementar um mecanismo de sinal de atividade que garante que o service worker permaneça ativo enquanto você aguarda as mensagens do servidor, mesmo que leve mais de 30 segundos para 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 de WebSocket para mais detalhes.

Sinal de atividade forte para service workers

Falando em ciclo de vida do service worker, outra atualização importante chegou: forte sinal de atividade para APIs que exigem interação do usuário. As APIs que exigem uma interação do usuário terão um sinal de atividade "forte" para os service workers de extensão (ou seja, permitir que o worker demore mais de cinco minutos nesta tarefa):

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

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

Confira nosso guia do tabCapture atualizado para saber como funciona ou, para ver um exemplo funcional, confira o exemplo Captura de guias - Gravador.

Nova API: Runtime.getContexts()

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

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 sobre como usar geolocalização para saber mais sobre como encontrar a localização geográfica da extensão usando a API Offscreen.

chrome.action.setBadgeText()

action.setBadgeText foi atualizado para resolver uma inconsistência entre o Manifesto V2 e o Manifesto V3. Transmitir uma string vazia ou null para action.setBadgeText limpará o texto do selo na guia especificada e usará o texto global do selo.

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

Resumo: outra etapa em direção ao Manifesto V3

Com o suporte aprimorado para o ciclo de vida do Service Worker e a API TabCapture atualizada, continuamos a progredir no nosso objetivo de preencher a lacuna de recursos entre o Manifesto V2 e V3. Consulte nossa página de problemas conhecidos para ver o status atual.