Estoy entrenando para el desarrollo de aplicaciones de Cordova y le doy la vuelta a 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, aparece 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:58Mi código está abajo. Este es mi index.html. Trato de 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>De antemano gracias por su ayuda porque la necesito. Jérôme
Mira este enlace , dice:
No se ejecutará JavaScript en línea. Esta restricción prohíbe tanto los bloques
<script>en línea como los controladores de eventos en línea(eg button onclick="...").
Para evitar problemas de secuencias de comandos entre sitios como los que se especifican 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 a event listener functions en 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 clara separación entre el contenido y el 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 -->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 *">