17

Ich mache eine Chrome-Erweiterung, aber ich scheine den folgenden Fehler zu erhalten, wenn ich versuche, ein onclick() Ereignis zu starten.Wie behebt man den JavaScript-Aufruffehler von chrome-extension?

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

und

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. 

Das ist mein 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'" 


} 
} 

Jede Hilfe auf diesen Fehler Festsetzung würde sehr geschätzt werden.

+2

Mögliche Duplikate von [Die Chrome-Erweiterung Popup funktioniert nicht, klicken Sie auf Ereignisse werden nicht behandelt] (https://stackoverflow.com/questions/17601615/the-chrome-extension-popup-is-not-working- click-events-are-not-handled) – Makyen

Antwort

8

In der Standardeinstellung Content Security Policy werden Inline-Skripts nicht geladen und nur lokales Skript kann geladen werden. Sie können die Standardrichtlinie folgendermaßen deaktivieren:

  1. Inline-Skript. Werfen Sie einen Blick auf Official Guide, Inline-Skripts können in die Whitelist aufgenommen werden, indem Sie den base64-codierten Hash des Quellcodes in der Richtlinie angeben. Ein Beispiel finden Sie in Hash usage for elements.

    Aber ich glaube, ein besserer Weg würde diese Logik in ein separates Skript extrahieren und kein Inline-Skript verwenden.

  2. Remote-Skript. Sie könnten Skript Ressourcen https://apis.google.com/js/client.js?onload=handleClientLoad durch den folgenden Abschnitt in manifest.json

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

    Auch die weiße Liste, ich glaube, einen besseren Weg, um die Remote-client.js Download werden könnte und schließen Sie es als lokales Skript.

Bitte gemäß der Beschreibung von Inline Script darüber im Klaren sein, arbeitet unsafe-inline nicht mehr.

Bis Chrome 45 gab es keinen Mechanismus, um die Einschränkung der Ausführung von Inline-JavaScript zu lockern. Insbesondere s das Anpassen einer Skript-Richtlinie, die 'unsafe-inline' enthält, hat keinen Effekt.

Verwandte Themen