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):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
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.