Chrome 116 ya está disponible en versión beta y contiene muchas actualizaciones interesantes para los desarrolladores de extensiones de Chrome. Veamos rápidamente las novedades.
Cómo abrir un panel lateral de forma programática
El panel lateral ha sido una de las funciones más solicitadas en las extensiones de Chrome y está disponible en Chrome desde la versión 114. Después de lanzar la API del panel lateral, uno de los primeros comentarios que recibimos fue que los desarrolladores querían una forma de abrir un panel lateral de manera programática. Y aquí está: chrome.sidePanel.open
ya está en versión beta. Puedes usarlo para abrir el panel lateral de la extensión de forma programática en respuesta a una interacción del usuario, como un clic en el menú contextual:
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 });
}
});
Compatibilidad con WebSocket en Service Workers
La compatibilidad con WebSocket es fundamental para muchas extensiones que planean migrar a Manifest V3. Chrome 116 mejora aún más la compatibilidad con WebSocket en los service workers, ya que toda la actividad de WebSocket restablecerá el temporizador de inactividad de 30 s del service worker. Esto significa que, mientras tu WebSocket esté activo, el service worker permanecerá activo.
Puedes usarlo para implementar un mecanismo de keepalive que garantice que tu service worker permanezca activo mientras esperas mensajes de tu servidor, incluso si tardan más de 30 s en llegar:
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.
2
0 * 1000
);
}
Consulta nuestra nueva guía y muestra de WebSocket para obtener más detalles.
Keepalive sólido para Service Workers
Hablando del ciclo de vida del service worker, se lanzó otra actualización importante: la función de mantener activa la conexión para las APIs que requieren interacción del usuario. Las APIs que requieren una interacción del usuario tendrán keepalives "sólidos" para los service workers de la extensión (es decir, permitirán que el worker tarde más de 5 minutos en esta tarea):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
Grabar audio y video en segundo plano
Se cerró otra brecha entre Manifest V2 y Manifest V3: ahora puedes grabar audio y video en segundo plano con tabCapture
y documentos fuera de pantalla. Usa la API de chrome.tabCapture
en un trabajador de servicio para obtener un ID de transmisión después de un gesto del usuario. Luego, se puede pasar a un documento fuera de pantalla para iniciar la grabación.
Consulta nuestra guía actualizada de tabCapture
para obtener información sobre cómo funciona o, para ver un ejemplo funcional, consulta la muestra de Tab Capture - Recorder.
Nueva API: runtime.getContexts()
La nueva API de runtime.getContexts()
te permite recuperar información sobre los contextos activos asociados con tus extensiones. Por ejemplo, puedes usarlo para verificar si hay un documento fuera de pantalla activo:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT
9;
);
Nuevo motivo fuera de pantalla: GEOLOCATION
Se agregó geolocation
como otro motivo válido para usar un documento fuera de pantalla. Consulta nuestra guía para usar la ubicación geográfica y obtener más información sobre cómo obtener la ubicación geográfica de la extensión con la API de Offscreen.
chrome.action.setBadgeText()
Se actualizó action.setBadgeText
para abordar una incoherencia entre Manifest V2 y Manifest V3. Si pasas una cadena vacía o null
a action.setBadgeText
, se borrará el texto de la insignia de la pestaña especificada y se usará el texto de la insignia global de forma predeterminada.
action.setBadgeText({tabId: tabId, text: '
39;});
Resumen: Otro paso hacia Manifest V3
Con la compatibilidad mejorada con la vida útil de Service Worker y la API de TabCapture actualizada, seguimos avanzando en nuestro objetivo de cerrar la brecha de funciones entre Manifest V2 y V3. Consulta nuestra página de problemas conocidos para conocer el estado actual.