Error de puerto al cambiar la extensión de cromo del manifiesto v1 a v2

Al intentar portar la extensión de la versión de manifiesto 1 a la versión 2, esto apareció:

Error de puerto: no se pudo establecer la conexión. El extremo receptor no existe. chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings: 232

Esto apareció en la consola en las herramientas de desarrollador. No tengo idea de por dónde empezar a solucionar esta causa, no sé por qué está comenzando …

¿Qué puede causar este problema? y ¿hay alguna forma de saber exactamente qué lo está causando? Gracias.

La causa más probable de falla es la activación de la política de seguridad de contenido predeterminada cuando "manifest_version": 2 está activa. Una consecuencia del CSP predeterminado es que el JavaScript en línea no se ejecutará .

  

La línea anterior es un ejemplo de código en línea. La solución es colocar el script en un archivo JS externo:

  

Páginas de fondo / guiones

Cuando estaba usando páginas de fondo , no use:

  • "background_page": "background.htm" , o
  • "background": {"page": "background.htm"} ,
    pero
  • "background": {"scripts": ["background.js"]}
    donde background.js contiene la secuencia de comandos que se colocó inicialmente dentro de las tags en background.htm .

Oyentes de eventos en línea

Las ventanas emergentes de acción del navegador, los iniciadores de aplicaciones, las páginas de opciones, etc. a menudo contienen oyentes de eventos en línea. Por el CSP, estos también están prohibidos.

no funciona . La solución es agregar el evento en un archivo JS externo usando addEventListener . Eche un vistazo a la documentación o a esta respuesta para ver un ejemplo.

Otro

  • La creación de JavaScript a partir de cadenas ( eval , Function , setTimeout , ...) está prohibida. Reescriba su código para no crear código a partir de cadenas, o use la opción de manifiesto de sandbox (introducido en Chrome 21). Desde Chrome 22 , la política CSP unsafe-eval se puede utilizar para eliminar esta restricción.
  • JSONP no funciona, porque los recursos externos (JavaScript) no se pueden cargar en el contexto de la extensión . Use un XMLHttpRequest ordinario en lugar de JSONP ( más información + ejemplo ).
    La única excepción es cuando el recurso se obtiene sobre https no http . El CSP puede ajustarse para introducir esta excepción; consulte la documentación :

     "content_security_policy": "script-src 'self' https://example.com; object-src 'self'", 

Documentación oficial

La documentación oficial también proporciona una excelente explicación sobre el tema, consulte "Tutorial: Migrar a Manifiesto V2" .

Para mí, la solución estaba cambiando:

  

a:

  

Tal vez también es ayudar a otros!