GAPI 未定义
GAPI Is Not Defined
我很难将 Google javascript api 加载到我的 chrome 扩展中。请注意,我是 javascript 的新手,甚至是 chrome 扩展的新手。
我有一个 background.js 执行脚本的文件
chrome.tabs.executeScript(null, { file: "ChromeExtension.js" });
这个ChromeExtension.js文件看起来如下
//Call Initialize Method
init();
//Function To Initial Chrome Extension
function init(){
var clientID = 'Client ID';
var apiKey = 'API Key';
var scopes = 'https://www.googleapis.com/auth/plus.me';
loadGAPIClient();
gapi.client.setApiKey(apiKey);
}
我的问题是在
gapi.client.setApiKey(apiKey);
我得到 gapi is not defined 事情是一旦我的 ChromeExtension.js 完成执行,gapi 就被完全定义并且可用的。
我在一些堆栈溢出问题中尝试了其他建议,但无济于事。我认为这是由于缺乏 Javascript 知识,但如果有人能够提供一些帮助,我将不胜感激。
感谢您的宝贵时间。
编辑 - 当前 GAPI 负载
function () loadGAPIClient(){
var s = document.createElement("script");
s.type = "text/javascript";
s.src = "https://apis.google.com/js/client.js";
$("head").append(s);
}
此函数在我的 init() 中调用,我也对其进行了更新以反映这一点。
我也尝试过使用 jQuery.getScript 等方式。
请理解这是我的问题,我找不到正确加载 GAPI 客户端的方法
不要威胁我的回答是冒犯性的,在你的代码片段中没有证据表明,你已经加载了 Google API JavaScript 库,如 reference?
<script src="https://apis.google.com/js/plus.js?onload=init"></script>
你需要用到这个方法,不要手动调用init:让gapi为你调用:)
具体来说,您的 loadGAPIClient
添加了一个 <script>
标签,该标签然后在页面上下文中执行脚本,这与内容脚本上下文不同。
最终结果是 gapi
在页面代码中定义(如果页面加载自己的副本可能会产生冲突),但在您的代码中仍未定义。
我看不到一条简单的出路。您只能通过调用 executeScript
或在清单中声明它们来在内容脚本上下文中加载内容;如果我没记错的话,GAPI 将尝试使用 <script>
注入方法加载更多库。
所以我猜你最好的选择是在后台页面中加载库并从那里使用它,因为只要你 modify the CSP.[=19= 以这种方式加载外部 JS 就可以了]
或者,您可以尝试 this library,它可以解决默认 CSP 的问题并使用 chrome.identity
API。它可能会满足您的需求,但同样无法在内容脚本中使用。
我很难将 Google javascript api 加载到我的 chrome 扩展中。请注意,我是 javascript 的新手,甚至是 chrome 扩展的新手。
我有一个 background.js 执行脚本的文件
chrome.tabs.executeScript(null, { file: "ChromeExtension.js" });
这个ChromeExtension.js文件看起来如下
//Call Initialize Method
init();
//Function To Initial Chrome Extension
function init(){
var clientID = 'Client ID';
var apiKey = 'API Key';
var scopes = 'https://www.googleapis.com/auth/plus.me';
loadGAPIClient();
gapi.client.setApiKey(apiKey);
}
我的问题是在
gapi.client.setApiKey(apiKey);
我得到 gapi is not defined 事情是一旦我的 ChromeExtension.js 完成执行,gapi 就被完全定义并且可用的。
我在一些堆栈溢出问题中尝试了其他建议,但无济于事。我认为这是由于缺乏 Javascript 知识,但如果有人能够提供一些帮助,我将不胜感激。
感谢您的宝贵时间。
编辑 - 当前 GAPI 负载
function () loadGAPIClient(){
var s = document.createElement("script");
s.type = "text/javascript";
s.src = "https://apis.google.com/js/client.js";
$("head").append(s);
}
此函数在我的 init() 中调用,我也对其进行了更新以反映这一点。
我也尝试过使用 jQuery.getScript 等方式。
请理解这是我的问题,我找不到正确加载 GAPI 客户端的方法
不要威胁我的回答是冒犯性的,在你的代码片段中没有证据表明,你已经加载了 Google API JavaScript 库,如 reference?
<script src="https://apis.google.com/js/plus.js?onload=init"></script>
你需要用到这个方法,不要手动调用init:让gapi为你调用:)
具体来说,您的 loadGAPIClient
添加了一个 <script>
标签,该标签然后在页面上下文中执行脚本,这与内容脚本上下文不同。
最终结果是 gapi
在页面代码中定义(如果页面加载自己的副本可能会产生冲突),但在您的代码中仍未定义。
我看不到一条简单的出路。您只能通过调用 executeScript
或在清单中声明它们来在内容脚本上下文中加载内容;如果我没记错的话,GAPI 将尝试使用 <script>
注入方法加载更多库。
所以我猜你最好的选择是在后台页面中加载库并从那里使用它,因为只要你 modify the CSP.[=19= 以这种方式加载外部 JS 就可以了]
或者,您可以尝试 this library,它可以解决默认 CSP 的问题并使用 chrome.identity
API。它可能会满足您的需求,但同样无法在内容脚本中使用。