17

Tworzę rozszerzenie chrome, ale wydaje mi się, aby uzyskać następujący błąd podczas próby uruchomienia zdarzenia onclick().Jak naprawić błąd inline JavaScript inline JavaScript?

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:" 

i

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. 

To mój 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'" 


} 
} 

Każda pomoc do mocowania tego błędu będzie znacznie doceniane.

+2

Możliwy duplikat [Chrome rozszerzenie okienko nie działa, kliknij zdarzenia nie są obsługiwane] (https://stackoverflow.com/questions/17601615/the-chrome-extension-popup-is-not-working- click-events-are-not-handleled) – Makyen

Odpowiedz

8

Domyślnie Content Security Policy, skrypty wbudowane nie zostaną załadowane i można załadować tylko skrypt lokalny. Możesz złagodzić domyślną politykę przez:

  1. Skrypt śródliniowy. Spójrz na Official Guide, skrypty wbudowane można umieścić na białej liście, określając kod skrótu kodowany base64 kodu źródłowego w strategii. Zobacz przykład Hash usage for elements.

    Ale wierzę, że lepszy sposób wyodrębniłby tę logikę do osobnego skryptu i nie używał skryptu wbudowanego.

  2. Zdalny skrypt. Można białej listy zasobów skryptów https://apis.google.com/js/client.js?onload=handleClientLoad brzmienie sekcji w manifest.json

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

    Również wierzę, lepszy sposób może być pobieranie zdalne client.js i dołączyć go jako lokalny skrypt.

Należy pamiętać, zgodnie z opisem Inline Script, unsafe-inline już nie działa.

Do Chrome 45 nie było mechanizmu służącego do złagodzenia ograniczenia w wykonywaniu wbudowanego kodu JavaScript. W szczególności s przy ustalaniu strategii skryptu zawierającej "niebezpieczny-in-line" nie będzie miał wpływu.