在内容脚本中使用Chrome扩展程序中的Gmail Api

时间:2016-12-07 08:23:43

标签: javascript google-chrome-extension gmail gmail-api

我尝试在JS中创建一些chrome扩展程序,我需要在内容脚本中的扩展程序上使用Gmail API。 我正在尝试使用gmail.js gitHub库并使用inboxSdk来使用它。

所以,我在background.js文件中创建oauth2,并尝试在我的content.js文件中使用gapi.client.gmail ..但无论我尝试什么,它总是未定义gapi.client。 我成功发送请求并在加载Api后在background.js页面中从Gmail API获得响应,但不在内容脚本中。

这是我的清单文件:

{
"name": "Example Gmail Extension",
 "content_scripts": [
  {
    "matches": [
     "https://mail.google.com/*",
     "http://mail.google.com/*" ],  
    "js": ["inboxsdk.js","content.js"],
    "run_at": "document_end"
  }
],  
"background": {
  "scripts": ["background.js" ,"client.js"]
},
"content_security_policy": "script-src https://*.google.com 'unsafe-eval';       object-src 'self'",
"oauth2": {
  "client_id": <clientid>,
  "scopes": ["https://www.googleapis.com/auth/gmail.modify"] 
 },
"permissions": [
    "background",
    "identity",
    "storage",
    "https://www.googleapis.com/*",
    "https://*.googleusercontent.com/*",
     "https://mail.google.com/",
     "http://mail.google.com/" ], 
 "manifest_version": 2
 }

当client.js包含javaScript的Gmail API库时。 我使用这个Loading Google API Javascript Client Library into Chrome Extension来加载它。

我的后台文件只包含oauth和Gmail Api的负载..当它加载它的recgonize gapi.client时,我可以创建请求并获得响应。

chrome.identity.getAuthToken(
{'interactive': true},
function(token){
}  

window.gapi_onload = function(){
gapi.auth.authorize(
    {
        client_id: '<clientid',
        immediate: true,
        scope: 'https://www.googleapis.com/auth/gmail.modify'
    },
    function(){
      gapi.client.load('gmail', 'v1', function(){ 

       *here I sucess to call to gmail API with gapi.client....* 
    });
    }
);

我做错了吗? 我也尝试在内容脚本中设置client.js,但这并不是一样的错误。

全心全意。

1 个答案:

答案 0 :(得分:2)

虽然方便,但Google的Javascript客户端库(gapi。*)不需要在您的扩展程序中调用Google API。事实上,使用该库可能不是一个非常好的主意。你必须添加&#34; unsafe-eval&#34;策略(由于某种原因,它被称为不安全)然后动态加载gapi脚本(您不在代码中执行此操作,这可能是您的麻烦的根本原因)或者在您的扩展中打包gapi库,纯粹从软件生命周期的角度来看,这是一个坏主意。

底线:您应该使用XMLHttpRequest或(最好)HTML5 Fetch API直接调用HTTP(&#34; REST&#34;)Google API。