notification notificaciones javascript android cordova content-security-policy

javascript - notification - notificaciones cordova



Cordova: se niega a ejecutar el controlador de eventos en línea porque viola el siguiente contenido Política de seguridad (2)

Intente agregar img-src * a la etiqueta Content-Security-Policy:

<meta http-equiv="Content-Security-Policy" content="default-src ''self'' data: gap: https://ssl.gstatic.com ''unsafe-eval''; style-src ''self'' ''unsafe-inline''; media-src *; img-src *">

Estoy entrenando para el desarrollo de aplicaciones de Cordova y soluciono un problema con la Política de seguridad de contenido.

Mi aplicación se ejecuta con el emulador de Android, pero cuando tengo que ejecutar un javascript recibo un mensaje en NetBeans (ventana de salida).

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src ''self'' https://ssl.gstatic.com". (22:35:56:126 | error, security) at www/index.html:58

Mi código está abajo. Este es mi index.html. Intento entender cómo funciona CSP y creo que entiendo el concepto, pero en este caso, no entiendo el problema. La línea 58 es el comentario.

<html> <head> <meta http-equiv="Content-Security-Policy" content="default-src ''self'' * data: gap: https://ssl.gstatic.com ''unsafe-eval''; style-src ''self''; script-src ''self'' https://ssl.gstatic.com; media-src *"> <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> <title>Hello World</title> <link rel="stylesheet" type="text/css" href="css/index.css"> </head> <body> <div class="app"> <h1>Apache Cordova</h1> <div id="deviceready" class="blink"> <p class="event listening">Connecting to Device</p> <p class="event received">Device is Ready</p> </div> </div> <!-- line 58 --> <button onclick="capturePhoto();">Capture Photo</button> <br> <img style="display:none;width:80px;height:80px;" id="smallImage" src="" /> <img style="display:none;" id="largeImage" src="" /> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> </body> </html>

Gracias de antemano por su ayuda porque la necesito. Jérôme


Mira este link , dice:

JavaScript en línea no será ejecutado. Esta restricción prohíbe tanto los bloques de <script> línea como los manejadores de eventos en línea (eg button onclick="...") .

Para evitar problemas de secuencias de comandos entre sitios como se especifica a continuación

one.app#/home:1 Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src ''self'' ''nonce-d452460d-e219-a6e5-5709-c8af6ca82889'' chrome-extension: ''unsafe-inline'' ''unsafe-eval'' https://sfdc.azureedge.net *.na34.visual.force.com https://ssl.gstatic.com/accessibility/". Note that ''unsafe-inline'' is ignored if either a hash or nonce value is present in the source list.

Vaya para event listener functions lugar de onclick=''myFun()" .

<body onload="main();"> <button onclick="clickHandler(this)"> Click for awesomeness! </button> </body> <script> function clickHandler(element) { // On click Code } function main() { // Initialization work goes here. } </script>

Para poder trabajar con el nuevo navegador, debe escribir su código con una separación clara entre contenido y comportamiento.

<body> <button>Click for awesomeness!</button> </body> <script src="popup.js"></script> <!-- popup.js --> document.addEventListener(''DOMContentLoaded'', function () { document.querySelector(''button'').addEventListener(''click'', clickHandler); main(); }); function clickHandler(element) { // On click Code } function main() { // Initialization work goes here. } <!-- popup.js -->