我尝试在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,但这并不是一样的错误。
全心全意。
答案 0 :(得分:2)
虽然方便,但Google的Javascript客户端库(gapi。*)不需要在您的扩展程序中调用Google API。事实上,使用该库可能不是一个非常好的主意。你必须添加&#34; unsafe-eval&#34;策略(由于某种原因,它被称为不安全)然后动态加载gapi脚本(您不在代码中执行此操作,这可能是您的麻烦的根本原因)或者在您的扩展中打包gapi库,纯粹从软件生命周期的角度来看,这是一个坏主意。
底线:您应该使用XMLHttpRequest或(最好)HTML5 Fetch API直接调用HTTP(&#34; REST&#34;)Google API。