【发布时间】:2019-07-18 05:00:40
【问题描述】:
我正在使用 Google API (gapi) 进行用户登录。
我的代码如下。它异步加载 google sdk。加载后我需要调用api函数gapi.auth.authorize
(function(d: any, s: string, id: string) {
var js: HTMLScriptElement, gjs: Element = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "https://apis.google.com/js/client.js";
gjs.parentNode.insertBefore(js, gjs);
if (js.readyState){ //IE
js.onreadystatechange = function(){
if (js.readyState == "loaded" ||
js.readyState == "complete"){
js.onreadystatechange = null;
gapi.auth.authorize(); //<-- details omitted
}
};
} else { //Others
js.onload = function(){
gapi.auth.authorize(); //<-- details omitted
};
}
}(document, 'script', 'google-jssdk'));
现在的问题是 - 我收到错误
TypeError: gapi.auth 未定义
它应该被定义吧?我查看了控制台,然后输入了gapi.auth,我得到了一个对象作为响应。
所以我相信js.onload 事件会提前触发,即当gapi.auth 尚未准备好时。
如何解决这个问题?或者更具体地说,如何为 gapi 添加 onload 事件?
【问题讨论】:
-
我也有同样的问题。我在mac os上使用chrome。我正在同步加载,当我在控制台中输入
gapi.auth时,它仍然是undefined,当我输入gapi时,我得到一个具有许多属性的对象,例如client、plus等,但没有@987654331 @。这是否与从开发者控制台启用的 API 有关?我只启用了 Google+ API。
标签: javascript google-api-js-client