Política de seguridad de contenido: no se puede cargar la API de Google en la extensión de Chrome

Esto es relativo a una extensión de Chrome. Estoy probando uno simple que usa la API de gráficos de Google

Tengo este código en mi documento html "popup.html", que se carga al hacer clic en el icono.

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
  <script type="text/javascript" src="js/popup.js"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>

  [...]
</body>
</html>

Recibo el siguiente mensaje:

Se negó a cargar el script 'http://www.google.com/jsapi?key=xxxxxxxxxxxx' porque infringe la siguiente directiva de Política de seguridad de contenido: "script-src 'self' chrome-extension-resource:".

Entendí que es algo relativo a los permisos, intenté modificar mi archivo Manifest pero sin éxito:

{
  [...]
  "manifest_version": 2,
  "permissions": ["http://*.google.com/"],
  "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}

¿Alguna idea?

preguntado el 26 de agosto de 12 a las 10:08

Utilizar https: recurso. Los recursos Http nunca se pueden incluir en la lista blanca. -

3 Respuestas

Luché con este problema durante las últimas 12 horas y finalmente lo hice funcionar. ¿Por qué tomó tanto tiempo? Porque me sacaron del camino varias veces. Primero, las pistas falsas:

  1. "Hazlo HTTPS" -- No importa. Mi extensión de Chrome ahora hace llamadas HTTP regulares a un dominio diferente y funciona bien. (ACTUALIZACIÓN: un poco más de aclaración. El mito de "hacerlo https" tiene sus raíces en un problema similar que la gente tiende a tener cuando se trata de cargar SCRIPT. Si necesita traer un archivo .js externo, entonces sí, necesita modifique su content_security_policy e incluya el nombre de host adecuado, que parece aceptar solo https. Tenga en cuenta que esto es diferente a presionar un nombre de host externo para algo como los servicios REST. Como dije antes, esto no requiere la modificación de content_security_policy, ni https. )

  2. "Use JSONP en sus llamadas JQuery AJAX": esta podría ser una forma de abordar AJAX entre dominios en páginas web normales, pero no es necesario en una extensión de Chrome debido a la Política de seguridad de contenido integrada. Además, implementar JSONP suena como un PITA porque requiere cambios en el lado del servidor para manejar el parámetro de devolución de llamada (o algo así, todavía no estoy seguro). En cualquier caso, no es necesario.

  3. "Meter con la cadena de la Política de seguridad de contenido (CSP) en su extensión": en la versión 2 del manifiesto, la cadena predeterminada funciona bien: "script-src 'self'; object-src 'self'". Ni siquiera tiene que especificarlo explícitamente. Lo que necesita es incluir el dominio que está tratando de acceder desde la extensión como un valor de "permiso".

La solución:

Elimine todo el javascript en línea de su extensión. Consígalo en un archivo .js separado. Sospecho que para la mayoría de los archivos html con una cantidad decente de javascript, este proceso apestará. Afortunadamente para mí, todo lo que tenía era una carga de cuerpo que pude mover a un archivo js separado como evento de carga window.addlistener en su lugar.

La página que realmente necesita leer para superar este problema está aquí: https://developer.chrome.com/apps/contentSecurityPolicy

Respondido 01 Abr '16, 20:04

Muestre ejemplos de código de cómo solucionar este caso, especialmente en content_security_policy dentro del archivo de manifiesto. - mohamed al banna

@EE33 Este repositorio es antiguo y la extensión ya no existe, pero tiene un archivo de manifiesto que puede consultar: github.com/cyrusadkisson/hackbook-chromex - cinco perros

Solo haz que use el https protocolo en su lugar. El error que está recibiendo es con respecto a la Política de seguridad de contenido.

Consulte las Relaxing the default policy sección de la página. Menciona que solo puede incluir en la lista blanca HTTPS, chrome-extension y chrome-extension-resource.

respondido 14 mar '17, 08:03

Gracias @Amaan, hace que funcione... ¡Casi! ¿Debería tener otra póliza? Incluso ahora que la API de Google está cargada, no puedo iniciarla. <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart", "table"]}); </script> Se negó a ejecutar el script en línea porque viola la siguiente directiva de Política de seguridad de contenido: "script-src 'self' google.com". - Laurent

¡Bueno, no hay guiones en línea! Usar document.getElementById('elementID').addEventListener para eventos en su lugar. Agrega un popup.js archivo para sus bloques de código JS. Referirse a desarrollador.chrome.com/trunk/contentSecurityPolicy.html#H3-1 - Algún chico

Recibo este error [Informe] cuando ejecuto la extensión Augury Chrome para depurar una aplicación Angular. Deshabilite la extensión y el error desaparecerá. Esto no ayudará a las personas que escriben extensiones, pero puede ayudar a las que no lo hacen.

[Report Only] Refused to load the script 'https://apis.google.com/js/googleapis.proxy.js?onload=startup' because it violates the following Content Security Policy directive: "script-src 'report-sample' 'nonce-EagvF0PX1Z3gVL2Dka1hbA' 'unsafe-inline' 'strict-dynamic' https: http:". 'strict-dynamic' is present, so host-based whitelisting is disabled. Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

Respondido 12 Jul 19, 06:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.