我尝试从Chrome扩展程序连接到我的localhost服务的Google Endpoints API。我设法将OAuth转换为Google Contact API,而不是通过他们的JS客户端,但使用https://apis.google.com/js/client.js?onload=loadF
从不调用回调函数。当我尝试手动调用它时,我在控制台中出错:
Refused to execute inline event handler because it violates the following Content Security Policy directive
。似乎后台工作者没有足够的权限来加载API,但是没有关于它的信息来自控制台。
我的JS代码
var apiRoot='//localhost:8080/_ah/api';
var loadF = function() {
console.log("api init");
gapi.client.load('my_api', 'v1', function(){
console.log("callback");
}, apiRoot);
}
我的文件:
{
"name": "Linkeer",
"version": "1.0",
"description": "Linkeer ",
"manifest_version": 2,
"icons": {
"128": "icon128.png"
},
"browser_action": {
"default_title": "OAuth 2.0",
"default_icon": "icon128.png",
"default_popup": "options.html"
},
"options_page": "options.html",
"content_scripts": [
{
"matches": ["http://www.google.com/robots.txt*"],
"js": ["oauth2/oauth2_inject.js"],
"run_at": "document_start"
}
],
"permissions": [
"https://accounts.google.com/o/oauth2/token",
"http://localhost:8080/_ah/api"
],
"web_accessible_resources" : [
"oauth2/oauth2.html"
],
"content_security_policy": "script-src 'self' http://localhost https://apis.google.com https://www.googleapis.com; object-src 'self'"
}
答案 0 :(得分:2)
对于身份验证,我建议使用Chrome Identity API,这样可以实现比目前使用的OAuth2 for Extensions库更清晰,更简单的实现。
我还没有找到一个让JS客户端库在Chrome扩展程序内工作的好方法(虽然暂时没试过)。虽然有open feature request。
直接创建XMLHttpRequest
的API请求应该很容易,但不使用库。
答案 1 :(得分:1)
您可能需要使用'unsafe-inline'
更新您的CSP,这会降低安全性,但可能是Google JS要求的。
"script-src 'self' http://localhost https://apis.google.com https://www.googleapis.com 'unsafe-inline'; object-src 'self'"
答案 2 :(得分:1)
今天,我不相信这是可能的。至少有两个问题: