Как исправить ошибку вызова встроенного JavaScript chrome?
Я делаю расширение chrome, но я, кажется, получаю следующую ошибку, когда пытаюсь запустить событие onclick().
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:"
и
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.
Это мой 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'"
}
}
Любая помощь в исправлении этой ошибки будет очень оценена.
Ответы
Ответ 1
По умолчанию Политика безопасности контента, встроенные скрипты не будут загружены и могут быть загружены только локальные script. Вы можете отключить политику по умолчанию:
-
Inline Script. Взгляните на Официальное руководство, встроенные скрипты могут быть включены в белый список, указав хэш-код, основанный на base64 исходного кода в политике. См. Использование хэша для элементов для примера.
Но я считаю, что лучший способ извлечь эту логику в отдельный script и не использовать inline Script.
-
Удаленный Script. Вы можете использовать белый список script ресурсов https://apis.google.com/js/client.js?onload=handleClientLoad
в следующем разделе в manifest.json
"content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'"
Кроме того, я считаю, что лучший способ - загрузить удаленный client.js
и включить его в качестве локального Script.
Обратите внимание, что в описании Inline Script, unsafe-inline
больше не работает.
До Chrome 45 не было механизма для ослабления ограничения на выполнение встроенного JavaScript. В частности, политика s etting a script, которая включает в себя "небезопасный-встроенный", не будет иметь эффекта.