Estoy escribiendo una extensión de Chrome simple que intercepta eventos clave de medios e interactúa con un sitio web.
Lo tengo configurado para que la extensión se pueda activar y desactivar haciendo clic en ella. Mientras está activado, supervisa una pestaña y le envía eventos cuando se presionan las teclas multimedia. Cuando está apagado, aún intercepta las pulsaciones de las teclas multimedia, pero no hace nada con ellas.
Mi problema es que quiero dejar de interceptar las pulsaciones de teclas de medios cuando la extensión está "apagada". Me gustaría que Chrome utilice las teclas de medios como lo haría normalmente si mi extensión no estuviera instalada. Supongo que hay una forma de dejar de interceptar las pulsaciones de teclas o de reenviarlas a Chrome, pero no sé cómo.
Actualmente estoy usando el manifiesto para interceptar las pulsaciones de teclas con este código:
{ .... a bunch of stuff ... "manifest_version": 3, "background": { "service_worker": "background.js" }, "commands": { "playPause": { "suggested_key": { "default": "MediaPlayPause" }, "global": true, "description": "Toggle play/pause" }, "playNext": { "suggested_key": { "default": "MediaNextTrack" }, "global": true, "description": "Play next track" }, "playPrev": { "suggested_key": { "default": "MediaPrevTrack" }, "global": true, "description": "Play previous track" } } }Entonces estoy capturando las pulsaciones de teclas con esto:
function commandFired(command) { chrome.storage.local.get('activeTabId', result => { if (result.activeTabId == -1) { //send to chrome normally here return; } switch (command) { case "playNext": //Handling next break; case "playPrev": //Handling prev break; case "playPause": //Handling play break; } }); } chrome.commands.onCommand.addListener(commandFired);Chrome no tiene una API para deshabilitar las teclas de acceso rápido mediante programación, por lo que tendrá que cancelar el registro de todo el trabajador del servicio y ofrecer un botón en la ventana emergente para volver a registrarlo.
manifiesto.json:
"action": {"default_popup": "popup.html"},ventana emergente.html:
<label><input type=checkbox id=power>Enabled</label> <script src=popup.js></script>ventana emergente.js:
Object.assign(document.getElementById('power'), { checked: !!navigator.serviceWorker.controller, async onchange() { if (this.checked) { const bg = chrome.runtime.getManifest().background; await navigator.serviceWorker.register(bg.service_worker, {type: bg.type}); } else { (await navigator.serviceWorker.getRegistration())?.unregister(); } }, }); En caso de que quiera seguir escuchando otros eventos de chrome , registre un archivo bg2.js diferente después de cancelar el registro del principal. El bg.js principal puede importar bg2.js para deduplicar el código, más información .