Javascript 无法读取属性';初始';未定义的gapi.client的

Javascript 无法读取属性';初始';未定义的gapi.client的,javascript,google-calendar-api,Javascript,Google Calendar Api,我正在尝试在应用程序中集成GoogleCalendarAPI和Js。我试着跟着。如果我将示例代码粘贴到HTML文档中,更改clientID和API键,则在Chrome中打开文件时会附加错误 另外,使用console.log(gapi.client)我返回null 代码的第一块是调用gapi函数的地方(calendar_model.js) 第二个块是我将api脚本链接到文档的地方(我需要通过js在一个名为dependency.js的文件中这样做) 第三个块是我的index.js,在这里我调用dep

我正在尝试在应用程序中集成GoogleCalendarAPI和Js。我试着跟着。如果我将示例代码粘贴到HTML文档中,更改clientID和API键,则在Chrome中打开文件时会附加错误

另外,使用
console.log(gapi.client)
我返回
null

代码的第一块是调用gapi函数的地方(calendar_model.js)

第二个块是我将api脚本链接到文档的地方(我需要通过js在一个名为dependency.js的文件中这样做)

第三个块是我的index.js,在这里我调用dependency.js中的函数

console.log(“第一”);
//来自开发人员控制台的客户端ID和API密钥
var CLIENT_ID='xxxxxxxxxxxxxxx.apps.googleusercontent.com';
var API_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//quickstart使用的API的API发现文档URL数组
var DISCOVERY_DOCS=[”https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest"];
//API要求的授权范围;可以使用多个作用域
//包含,用空格分隔。
变量作用域=”https://www.googleapis.com/auth/calendar.readonly";
var按钮;
var-signburtton;
/**
*加载时,调用以加载auth2库和API客户端库。
*/
函数handleClientLoad(){
log(“gapi类型:“+typeof gapi+”\n”);
log(“gapi客户端类型:“+typeof gapi.client+'\n”);
load('client:auth2',initClient);
}
/**
*初始化API客户端库并设置登录状态
*听众。
*/
函数initClient()
{
log(“initClient回调启动”);
gapi.client.init({
API密钥:API_密钥,
clientId:客户端ID,
发现文档:发现文档,
范围:范围
}).然后(函数(){
//侦听登录状态的更改。
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
console.log(gapi);
//处理初始登录状态。
updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
authorizeButton.onclick=handleAuthClick;
SignerButton.onclick=handleSignoutClick;
},函数(错误){
appendPre(JSON.stringify(error,null,2));
});

}
您遇到的主要问题是,您在此处将
initClient
函数作为显式函数调用:

gapi.load('client:auth2', initClient())
您必须将其作为隐式函数传递,因为
gapi.load
将使用它作为一个函数(我建议您进一步检查它们)。因此,必须这样通过:

gapi.load('client:auth2', initClient)
注意
initClient()
initClient
中的括号之间微妙但真正重要的区别


此外,这些变量在空气中,没有为它们指定我所能看到的值:

var authorizeButton;
var signoutButton;
应该为它们指定按钮元素,以便最终在代码中处理它们:

var authorizeButton = document.getElementById('authorize_button');
var signoutButton = document.getElementById('signout_button');

您遇到的主要问题是,在此处将
initClient
函数作为显式函数调用:

gapi.load('client:auth2', initClient())
您必须将其作为隐式函数传递,因为
gapi.load
将使用它作为一个函数(我建议您进一步检查它们)。因此,必须这样通过:

gapi.load('client:auth2', initClient)
注意
initClient()
initClient
中的括号之间微妙但真正重要的区别


此外,这些变量在空气中,没有为它们指定我所能看到的值:

var authorizeButton;
var signoutButton;
应该为它们指定按钮元素,以便最终在代码中处理它们:

var authorizeButton = document.getElementById('authorize_button');
var signoutButton = document.getElementById('signout_button');

嗨,这里没有任何代码,我们猜不出是怎么回事。如果我可以猜一猜,我想你没有正确地包含所有脚本(或者等到google api加载后再调用它),它是否提示你登录?请安装,这样它就无法检测typescript的映射,然后尝试调试它。我已经插入了一些代码块@Pierre,希望它能帮助你确保导入api.google.com/js/api.js“>在您的index.htmlhi中,如果没有任何代码,我们无法猜出哪里出了问题。如果我可以猜一猜,我想你没有正确地包含所有脚本(或者等到google api加载后再调用它),它是否提示你登录?请安装,这样它就无法检测typescript的映射,然后尝试调试它。我已经插入了一些代码块@Pierre,希望它能帮助你确保导入api.google.com/js/api.js“>在你的index.htmlOh中,我是多么愚蠢…:)我已经更改了它,但是gapi.client仍然没有定义(gapi存在,所以库被加载)。请看我所附的最后一张图片,该变量在第二个块中赋值,因为元素是在代码中创建的,哪个是
index.js
文件?VARABLE
x
是什么意思?我已经插入了index.js(这是最后一段代码)。x只是一个局部变量,我用来创建页面的元素。我在
注册表中遇到错误。添加
你使用的是外部库吗?哦,我真傻……:)我已经更改了它,但是gapi.client仍然没有定义(gapi存在,所以库被加载)。请看我所附的最后一张图片,该变量在第二个块中赋值,因为元素是在代码中创建的,哪个是
index.js
文件?VARABLE
x
是什么意思?我已经插入了index.js(这是最后一段代码)。x只是一个局部变量,我用来创建页面的元素。我在
注册表中出错。添加
您使用的是外部库吗?