我正在使用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事件?
答案 0 :(得分:3)
这是什么浏览器?此外,您需要在脚本的?onload=myFunction
属性末尾添加src
参数,然后实现window['myFunction'] = function() { ... }
以检测库准备情况。加载通常会注入一个额外的脚本节点,您也需要等待那个节点。
答案 1 :(得分:0)
window.gapi_onload = function(){gapi.auth.authorize(); }
答案 2 :(得分:0)
您也可以尝试使用软件包gapi-script,该软件包可立即提供apgi,因此您无需等待任何脚本加载,只需导入并使用:
import { gapi } from 'gapi-script';
该软件包还具有初始化gapi auth2的功能:
import { loadAuth2 } from 'gapi-script';
let auth2 = await loadAuth2(clientId, scopes);