我有 Angular2 应用程序,其中包含登录用户的组件。用户登录后,我立即路由到某个页面,但在控制台中收到几个错误:
Uncaught TypeError: Cannot read property 'style' of null
at G_ (cb=gapi.loaded_1:91)
at H_.<anonymous> (cb=gapi.loaded_1:94)
at Function.<anonymous> (cb=gapi.loaded_0:155)
at run (vendor.js:99284)
at runIfPresent (vendor.js:99313)
at onGlobalMessage (vendor.js:99353)
at ZoneDelegate.invokeTask (vendor.js:81254)
at Zone.runTask (vendor.js:81130)
at ZoneTask.invoke (vendor.js:81324)
在 apis.google.com 中:window.document.getElementById((c?"not_signed_in":"connected")+a.El).style.display="none";
如果用户登录、导航到随机页面然后从 Chrome 注销,也会发生这种情况。
有没有什么活动gapi
or gapi.auth2
断开监听器,这样我就可以避免错误。我认为这应该发生在ngOnDestroy
。或者也许配置应该说“渲染 SingIn 按钮后,不要管它”。
我认为问题是因为我使用gapi.signin2.render
。结束的主题是this https://stackoverflow.com/questions/34688248/google-throws-cannot-read-property-style-of-null-error-after-login-logout-if,但我无法使用解决方案“只是隐藏元素而不删除它".
Edited:
如果有帮助,这是我的渲染代码:
ngAfterViewInit()
{
gapi.load("auth2", () =>
{
gapi.auth2.init({
client_id: "************"
});
gapi.signin2.render(
this.googleLoginButtonId,
{
onsuccess: (user) => { this.onGoogleLoginSuccess(user); },
onfailure: (error) => { this.onGoogleLoginError(error); },
scope: this.scopes.join(" ")
});
});
}