29

Questa è un'estensione di Chrome relativa. Sto provando uno semplice che utilizza l'API di Google ChartCriterio di sicurezza del contenuto: impossibile caricare l'API di Google nell'estensione di Chrome

Ho questo codice nel mio documento html "popup.html", che viene caricato sul clic sull'icona.

<!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> 

ottengo il seguente messaggio:

Rifiutato di caricare lo script 'http://www.google.com/jsapi?key=xxxxxxxxxxx' perché viola la seguente direttiva politica di sicurezza contenuti : "script-src 'self' chrome-extension-resource:".

ho capito che è qualcosa di relativo ai permessi, ho cercato di modificare il mio file manifesto ma senza successo:

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

Qualche idea?

+0

Utilizzare un https ':' risorsa. Le risorse Http non possono mai essere autorizzate. –

risposta

22

Basta usare invece il protocollo https. L'errore che stai ricevendo riguarda lo Content Security Policy.

Vedere la sezione Relaxing the default policy della pagina. Si afferma che è possibile solo la whitelist HTTPS, chrome-extension e chrome-extension-resource.

+0

Grazie a @Amaan, lo fa funzionare ... Quasi! Dovrei avere un'altra politica? Anche ora le API di Google sono caricate, non posso avviarlo. ' ' Rifiutato di eseguire script inline perché viola la seguente direttiva di Content Security Policy:" script-src 'self' https://www.google.com ". – Laurent

+1

Beh, niente script in linea! Utilizzare invece 'document.getElementById ('elementID'). AddEventListener' per gli eventi. Aggiungi un file 'popup.js' per i tuoi blocchi di codice JS. Fare riferimento a http://developer.chrome.com/trunk/contentSecurityPolicy.html#H3-1 –

28

Ho lottato con questo problema nelle ultime 12 ore e ho finalmente funzionato. Perché ci è voluto così tanto tempo? Perché sono stato buttato fuori strada più volte. In primo luogo, i depistaggi:

  1. "Make it HTTPS" - Non importa. La mia estensione Chrome ora effettua normali chiamate HTTP a un dominio diverso e funziona perfettamente. (AGGIORNAMENTO: Un po 'più di chiarezza Il mito "make it https" è radicato in un problema simile che le persone tendono ad avere quando si tratta del caricamento di SCRIPT. Se devi inserire un file .js esterno, allora sì, devi modifica il tuo content_security_policy e includi il nome host corretto, che sembra accettare solo https. Ricorda che è diverso dal colpire un nome host esterno per qualcosa come i servizi REST. Come ho detto prima, questo non richiede la modifica di content_security_policy, né di https.)

  2. "Usa JSONP nelle chiamate JQuery AJAX": questo potrebbe essere un modo per indirizzare l'AJAX tra domini in normali pagine Web, ma non è necessario in un'estensione chrome a causa del Content Security incorporato Politica. Inoltre, l'implementazione di JSONP suona come una PITA perché richiede modifiche sul lato server per gestire il parametro di callback (o qualcosa, non sono ancora sicuro). In ogni caso, non è necessario.

  3. "Mess con la stringa Content Security Policy (CSP) nella tua estensione" - Sotto manifest versione 2, la stringa predefinita funziona bene: "script-src 'self'; object-src 'self'". Non devi nemmeno specificarlo esplicitamente. Quello di cui hai bisogno è di includere il dominio che stai cercando di colpire dall'estensione come valore "permesso".

La soluzione:

Rimuovere tutta la linea javascript dal proprio interno. Scaricalo in un file .js separato. Sospetto che per la maggior parte dei file html con una discreta quantità di javascript, questo processo farà schifo. Fortunatamente per me, tutto ciò che avevo era un carico di lavoro del corpo che ero in grado di spostare in un file js separato come evento onload di window.addlistener.

La pagina che ha realmente bisogno di leggere per superare questo problema è qui: https://developer.chrome.com/apps/contentSecurityPolicy

+0

Si prega di mostrare esempi di codice su come risolvere questo caso, specialmente in 'content_security_policy' all'interno del file manifest. – Mohammad

Problemi correlati