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 ver 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 agora está na versão Beta. Você pode usar esse recurso 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 a compatibilidade com WebSocket em service workers, já que toda a atividade do WebSocket redefine o timer de inatividade de 30 segundos do service worker. Isso significa que, enquanto o WebSocket estiver ativo, o service worker vai continuar funcionando.

Você pode usar isso para implementar um mecanismo de keepalive que garante que o service worker 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 do WebSocket para mais detalhes.

Keepalive robusto para service workers

Falando em ciclo de vida do service worker, outra atualização importante chegou: 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 service workers de extensão (ou seja, permitem que o worker leve 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 service worker para receber um ID de stream após um gesto do usuário. Ele pode ser transmitido a um documento offscreen para iniciar a gravação.

Confira nosso guia atualizado do tabCapture para saber como ele funciona ou, para um exemplo prático, consulte a amostra Captura de guia: gravador.

Nova API: runtime.getContexts()

Com a nova API runtime.getContexts(), é possível buscar informações sobre contextos ativos associados às suas extensões. Por exemplo, você pode usar para verificar se há um documento invisível ativo:

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

Novo motivo para ficar fora da tela: GEOLOCATION

geolocation foi adicionado como outro motivo válido para usar um documento fora da tela. Confira nosso guia usando geolocalização para saber mais sobre como obter 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 do selo global.

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

Resumo: mais uma etapa para o Manifest V3

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