29

Esto es una extensión relativa de Chrome. Estoy tratando de una simple que utiliza la API Google ChartPolítica de seguridad de contenido: no se puede cargar la API de Google en la extensión de Chrome

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> 

me sale el siguiente mensaje:

negó a cargar el script 'http://www.google.com/jsapi?key=xxxxxxxxxxx' porque no cumple con la siguiente directiva Política de Seguridad contenido : "script-src 'self' chrome-extension-resource:".

Me entiende que es algo relativo a los permisos, que intentó modificar mi archivo de manifiesto, 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?

+0

Use un 'https: 'recursos. Los recursos de Http nunca pueden incluirse en la lista blanca. –

Respuesta

22

Simplemente haga que use el protocolo https en su lugar. El error que está recibiendo está relacionado con el Content Security Policy.

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

+0

Gracias @Amaan que lo haga funcionar ... ¡Casi! ¿Debo tener otra política? Incluso ahora que Google API está cargado, no puedo iniciarlo. ' ' Se negó a ejecutar script en línea porque viola la siguiente directiva de Política de seguridad de contenido:" script-src 'self' https://www.google.com ". – Laurent

+1

Bueno, ¡no hay scripts en línea! Utilice 'document.getElementById ('elementID'). AddEventListener' para eventos en su lugar. Agregue un archivo 'popup.js' para sus bloques de código JS. Consulte http://developer.chrome.com/trunk/contentSecurityPolicy.html#H3-1 –

28

Luché con este problema durante las últimas 12 horas y finalmente lo conseguí. ¿Por qué tomó tanto tiempo? Porque me eché del camino varias veces. En primer lugar, las pistas falsas:

  1. "Hacer que 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 "hágalo https" tiene sus raíces en un problema similar que las personas tienden 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 servicios REST. Como mencioné anteriormente, esto no requiere la modificación de content_security_policy ni de 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 seguridad de contenido incorporada Política. Además, implementar JSONP suena como un PITA porque requiere cambios del lado del servidor para manejar el parámetro de devolución de llamada (o algo, todavía no estoy seguro). En cualquier caso, no es necesario.

  3. "Meterse con la cadena de política de seguridad de contenido (CSP) en su extensión": en la versión de manifiesto 2, 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á intentando obtener de la extensión como un valor de "permiso".

La solución:

Retire todo el Javascript en línea desde su extensión. Consíguelo en un archivo .js separado. Sospecho que para la mayoría de los archivos html con cualquier 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 para leer a superar este problema está aquí: https://developer.chrome.com/apps/contentSecurityPolicy

+0

. Muestre ejemplos de código de cómo solucionar este caso, especialmente en 'content_security_policy' dentro del archivo de manifiesto. – Mohammad

Cuestiones relacionadas