谷歌在登录/注销后抛出“无法读取null的'style'属性”错误,如果按钮从页面中删除

4
我是使用谷歌的“平台”网站登录。在登录页面上,我只在用户未认证时显示登录按钮。一旦他们登录,该按钮将从页面中删除。
这会导致谷歌抛出一个错误:
Uncaught TypeError: Cannot read property 'style' of null

这段代码来自于他们的压缩代码中的这一行:

window.document.getElementById((c ? "not_signed_in" : "connected") + a.El).style.display = "none";

这明显假设按钮仍在页面上。

理想情况下,我希望修复这个愚蠢的代码,并使其更加优雅地处理。它是开源的吗?我能做出贡献吗?在哪里可以找到它?

如果它是专有的,我猜我可以用一个解决方法来代替。我的解决方案是:如果我能让这个 Google 的东西 不渲染 按钮,那么我觉得我可以解决问题。

也就是说,我使用了他们的文档中描述的render方法。当我从页面中移除按钮容器时,我希望能够不渲染。但我看不到任何方法。

有什么好主意吗?


你是否移除了按钮?如果是,那么请停止这样做,改为隐藏它。如果没有移除,你可以创建一个相同ID的隐藏元素来避免异常。 - dandavis
1
@dandavis 是的,我移除了那个按钮。我不会停下来的!:-p 但是说真的,我不应该停下来。这个按钮在单页应用程序的登录页面上,用户在登录时会被重定向到另一个页面。非登录页面不应该有登录按钮(即使它被隐藏了;那很愚蠢)。此外,所涉及的ID是一些杂乱无章的哈希值,它是Google登录按钮逻辑内部的东西。我不能轻易地创建一个没有意义的新隐藏元素并使用相同的ID。我提到过我讨厌变通方法吗?哈哈 - 但还是谢谢!一个愚蠢的变通方法总比一个错误要好。 - chadoh
@dandavis,它确实有效。你可以在https://github.com/chadoh/entire_life/commit/ba926510cb5a0181c6d21dfd286db5f58facfa54中看到我已经实现了(完全不可接受但是功能性的)解决方法。 - chadoh
@chadoh 我也有同样的问题.. 你能在 http://stackoverflow.com/questions/41328556/angular-2-google-api-login-issue 帮我吗? - Java Curious ღ
可能是一个重复问题:无法读取空值属性“style” - Google 登录按钮 - Curly Brace
1个回答

2
无论何时用户登录,您都可以隐藏该框,以便它被呈现但不可见。
<div id="g-signin2" style="display: none;"></div>

1
在 Angular 上下文中帮助我解决了这个问题:我必须使用 ng-show/ng-hide 而不是 ng-if - Grimace of Despair
你好,我有同样的问题,请你帮忙查看一下这个链接:http://stackoverflow.com/questions/41328556/angular-2-google-api-login-issue,能否帮我解决一下?谢谢。 - Java Curious ღ
@GrimaceofDespair 同样的问题 链接。你解决了吗?我在GitHub上发布了一个问题。 - Makla
@Makla 我的解决方案如下:保持按钮的活性,但以某种方式隐藏它。确保它在DOM中存在,而使用ng-if时则不会存在这种情况,所以请确保使用ng-hide或一些CSS技巧。 - Grimace of Despair
我不使用ngIf,而是使用router.navigate(从登录页面到主页)。对我来说,这显然是一个错误,我认为Google应该修复它。我们将看到GitHub上的回应。 - Makla
Google这样做其实很愚蠢,必须在某个按钮上放置一个参考选项并将其隐藏起来。我相信有更聪明的方法可以实现参考功能。我猜我们现在只能将它隐藏起来,等待Google在某个时间点修复这个问题。 - kevado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接