que pwa google-chrome-extension

google chrome extension - pwa - Error de puerto al cambiar la extensión de cromo del manifiesto v1 a v2



manifest.json que es (2)

Para mí, la solución estaba cambiando:

<script type="text/javascript" src="bgScript.js"></script>

a:

<script src="bgScript.js"></script>

Tal vez también es ayudar a otros!

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á .

<script>chrome.extension.onConnect.addListener(...);</script>

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:

<script src="script.js"><!--original contents moved to script.js--></script>

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 etiquetas <script> 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.

<button onclick="test();"> 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" .