17

Sto facendo un'estensione di cromo, tuttavia mi sembra di ottenere il seguente errore quando provo a generare un evento onclick().Come risolvere l'errore di chiamata JavaScript inline dell'estensione chrome?

Refused to load the script 'https://apis.google.com/js/client.js?onload=handleClientLoad' because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:" 

e

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. 

Questo è il mio manifest.json:

{ 
    "manifest_version": 2, 

    "name": "SECURE", 
    "description": "this extension offers secure communication for GMAIL  users", 
    "version": "1.0", 

"browser_action": { 
"default_icon": "resources/icon16.png", 
"default_popup": "popup.html", 
"default_title": "Click here!" 


}, 

"background":{ 
    "scripts":["background.js"] 
}, 

"content_scripts": [ 
    { 
    "matches": ["http://*/*", "https://*/*"], 
    "js":["myscript.js"], 
    "run_at": "document_end" 
    } 
    ], 
"permissions": ["identity", "https://accounts.google.com/*", "https://www.googleapis.com/*"], 

"oauth2": { 
    "client_id": "975410329966.apps.googleusercontent.com", 
"scopes": [ 
    "<all urls>", 
    "https://www.googleapis.com/auth/drive", 
    "https://mail.google.com/", 
    "https://www.googleapis.com/auth/gmail.login", 
    "https://www.googleapis.com/auth/gmail.compose", 
    "https://www.googleapis.com/auth/gmail.readonly", 
    "https://www.googleapis.com/auth/gmail.send" 
    ], 

"content_security_policy":"script-src 'self' 'unsafe-inline' 'unsafe eval' https://apis.google.com/js/client.js?; object-src 'self'" 


} 
} 

Qualsiasi aiuto verso la risoluzione di questo errore sarebbe notevolmente apprezzato.

+2

Possibile duplicato di [Il popup dell'estensione di Chrome non funziona, gli eventi di clic non vengono gestiti] (https://stackoverflow.com/questions/17601615/the-chrome-extension-popup-is-not-working- click-eventi-sono-non-gestita) – Makyen

risposta

8

Per impostazione predefinita, Content Security Policy, gli script inline non verranno caricati e solo lo script locale può essere caricato. È possibile attenuare la politica predefinita:

  1. Script in linea. Dai uno sguardo a Official Guide, gli script inline possono essere autorizzati specificando l'hash codificato in base 64 del codice sorgente nel criterio. Vedi Hash usage for elements per un esempio.

    Ma credo che un modo migliore estraesse questa logica in uno script separato e non utilizzi lo script inline.

  2. Script remoto. Si potrebbe whitelist risorse di script https://apis.google.com/js/client.js?onload=handleClientLoad dal seguente sezione manifest.json

    "content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'" 
    

    Inoltre, credo che un modo migliore potrebbe essere scaricato il telecomando client.js e includerlo come uno script locale.

Si prega di notare come per la descrizione di Inline Script, unsafe-inline non funziona più.

Fino a Chrome 45, non c'era alcun meccanismo per rilassare la limitazione contro l'esecuzione di JavaScript in linea. In particolare, s l'impostazione di un criterio script che include 'non sicuro' non avrà alcun effetto.