首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Google API Javascript客户端库加载到Chrome扩展

将Google API Javascript客户端库加载到Chrome扩展
EN

Stack Overflow用户
提问于 2013-09-08 16:18:40
回答 5查看 15.6K关注 0票数 37

我尝试将google api javascript客户端库与chrome扩展结合在一起已经有一段时间了,但是chrome扩展似乎遇到了可怕的临阵退缩的情况。该脚本的链接为

https://apis.google.com/js/client.js

下载文件很麻烦,因为脚本实际上加载了其他脚本。我试着把它加到货单上

manifest.json (摘录)

代码语言:javascript
复制
"background": {
  "scripts": [
    "background.js",
    "https://apis.google.com/js/client.js?onload=callbackFunction"
  ]
},

但是这样扩展就不能加载了。我还尝试将脚本注入到后台html中。

background.js (摘录)

代码语言:javascript
复制
 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

EN

回答 5

Stack Overflow用户

发布于 2013-09-08 17:12:14

到目前为止,我找到的唯一解决方案是首先像我一样将脚本注入到后台html页面中:

background.js (摘录)

代码语言:javascript
复制
 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 (摘录)

代码语言:javascript
复制
"content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'"

然而,请注意,绕过安全保护只对https链接有效,我也发现它有点像hacky...any其他解决方案也是受欢迎的

票数 23
EN

Stack Overflow用户

发布于 2014-06-28 02:41:28

我在https://apis.google.com/js/client.js的源代码中发现了一些有趣的东西。它写道:

代码语言:javascript
复制
gapi.load("client",{callback:window["gapi_onload"], ......

一旦在网页中加载了gapi.load,就会调用client.js。看起来一旦加载了gapi.clientwindow.gapi_onload就会作为回调被调用。

作为概念的证明,我构建了这个柱塞:http://plnkr.co/edit/TGvzI9SMKwGM6KnFSs7U

gapi.authgapi.client都已成功打印到控制台。

回到Chrome扩展。

我把这个放在我的mainfest.json的背景部分

代码语言:javascript
复制
"background": {
  "scripts": [
    "background.js",
    "gapi-client.js"
  ]
}

其中background.js是我的扩展中的主要背景脚本。gapi-client.js的所有内容都是直接从https://apis.google.com/js/client.js复制和粘贴的。

background.js内部,它是这样写的:

代码语言:javascript
复制
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.authgapi.client的情况下,window.gapi_onload被如期调用。

在我的解决方案中,我没有自己创建background.html。我也没有修改内容安全策略。但是,请注意,该解决方案并未记录在案,因此将来可能会发生变化。

票数 12
EN

Stack Overflow用户

发布于 2016-05-12 11:38:07

你可以通过加载你的background.js的background.html加载它们。

代码语言:javascript
复制
<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:

代码语言:javascript
复制
"background":
{
 "page": "background.html"     
}, 
"content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'",
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18681803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档