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"]}
dondebackground.js
contiene la secuencia de comandos que se colocó inicialmente dentro de las etiquetas<script>
enbackground.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 CSPunsafe-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 sobrehttps
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" .