Los trabajadores del servicio Manifest v3 requieren que los oyentes estén definidos en el alcance global de un archivo, el paquete web se compila dentro de una función anónima. Estas dos cosas parecen básicamente incompatibles. ¿Alguien tiene una solución mejor que deshacerse del paquete web?
No existe tal requisito, es un reclamo incorrecto/inexacto en la documentación : "nivel superior de su secuencia de comandos" es una tergiversación de los términos técnicos utilizados para describir las partes internas del motor JS.
El requisito real es registrar a los oyentes en la fase principal (sincrónica) de la primera tarea del bucle de eventos JS , lo que sin duda puede ocurrir dentro de una función:
(() => { (() => { chrome.runtime.onMessage.addListener(msg => { /* ..... */ }); })(); })();