我尝试将google api javascript客户端库与chrome扩展结合在一起已经有一段时间了,但是chrome扩展似乎遇到了可怕的临阵退缩的情况。该脚本的链接为
https://apis.google.com/js/client.js
下载文件很麻烦,因为脚本实际上加载了其他脚本。我试着把它加到货单上
manifest.json (摘录)
"background": {
"scripts": [
"background.js",
"https://apis.google.com/js/client.js?onload=callbackFunction"
]
},
但是这样扩展就不能加载了。我还尝试将脚本注入到后台html中。
background.js (摘录)
var body = document.getElementsByTagName('body')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://apis.google.com/js/client.js?onload=callbackFunction";
body.appendChild(script);
但是chrome调试器给我提供了
Refused to load the script 'https://apis.google.com/js/client.js' because it violates the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:".
有什么想法,或者它们注定要分开吗?
编辑:请注意,如果您想使用回调函数,则必须在脚本url中添加"?onload=myCallbackFunction“。谢谢伊利亚。更多信息here
发布于 2013-09-08 17:12:14
到目前为止,我找到的唯一解决方案是首先像我一样将脚本注入到后台html页面中:
background.js (摘录)
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://apis.google.com/js/client.js?onload=callbackFunction";
head.appendChild(script);
然后,要绕过安全警告,请编辑清单文件(source):
manifest.json (摘录)
"content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'"
然而,请注意,绕过安全保护只对https
链接有效,我也发现它有点像hacky...any其他解决方案也是受欢迎的
发布于 2014-06-28 02:41:28
我在https://apis.google.com/js/client.js
的源代码中发现了一些有趣的东西。它写道:
gapi.load("client",{callback:window["gapi_onload"], ......
一旦在网页中加载了gapi.load
,就会调用client.js
。看起来一旦加载了gapi.client
,window.gapi_onload
就会作为回调被调用。
作为概念的证明,我构建了这个柱塞:http://plnkr.co/edit/TGvzI9SMKwGM6KnFSs7U
gapi.auth
和gapi.client
都已成功打印到控制台。
回到Chrome扩展。
我把这个放在我的mainfest.json
的背景部分
"background": {
"scripts": [
"background.js",
"gapi-client.js"
]
}
其中background.js
是我的扩展中的主要背景脚本。gapi-client.js
的所有内容都是直接从https://apis.google.com/js/client.js
复制和粘贴的。
在background.js
内部,它是这样写的:
window.gapi_onload = function(){
console.log('gapi loaded.', gapi.auth, gapi.client);
// Do things you want with gapi.auth and gapi.client.
}
请注意,在gapi-client.js
之前加载background.js
。因为gapi-client.js
会在加载后立即读取window["gapi_onload"]
,所以必须在此之前指定window.gapi_onload
。
结果,在填充了gapi.auth
和gapi.client
的情况下,window.gapi_onload
被如期调用。
在我的解决方案中,我没有自己创建background.html
。我也没有修改内容安全策略。但是,请注意,该解决方案并未记录在案,因此将来可能会发生变化。
发布于 2016-05-12 11:38:07
你可以通过加载你的background.js的background.html加载它们。
<html>
<head>
<title></title>
<script src="background.js"></script>
</head>
<body>
</body>
<script src="https://apis.google.com/js/client.js"></script>
</html>
使用manifest.json:
"background":
{
"page": "background.html"
},
"content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'",
https://stackoverflow.com/questions/18681803
复制相似问题