下面的代码用作使用谷歌登录的简单测试页面
<html lang="en">
<head>
<script type="text/javascript">
function onGapiLoaded() {
auth = gapi.auth2.init({
client_id: "REPLACE_WITH_YOUR_ID",
scope: "profile email"
});
console.log( "signed in: " + auth.isSignedIn.get() );
auth.isSignedIn.listen( function(signedIn){ console.log( "signedin: " + signedIn ) } );
gapi.signin2.render( "signInButton", {
'width': 230,
'height': 50,
'longtitle': true,
'theme': 'dark',
'onsuccess': onSignIn
} );
}
function onSignIn(googleUser) {
// Useful data for your client-side scripts:
var profile = googleUser.getBasicProfile();
console.log("Name: " + profile.getName());
};
</script>
<script src="https://apis.google.com/js/platform.js?onload=onGapiLoaded" async defer></script>
</head>
<body>
<div id="signInButton" class="g-signin2"></div>
</body>
</html>
但是,如果我从signin按钮中删除class="g-signin2"
,或者完全删除按钮,那么按钮不仅会消失,而且库中的整个标志也会停止工作--我得到了一个不明确的例外:
无法读取未定义的属性“init”
当我试图调用gapi.auth2.init
而用户没有登录时。看起来,auth库依赖于存在于dom中的一个按钮来初始化。
我计划在我的角度应用程序中加入这一点,在任何按钮出现在舞台上之前,该应用程序将初始化服务中的auth lib。如果用户已经登录,则不会出现任何登录按钮。根据这里的行为,如果没有DOM中的一个按钮,我将无法使用这个lib,这看起来相当紧缩。
发布于 2016-03-14 09:30:42
不要取出class="g-signin2"
,而是向它添加style="display:none;"
,在函数onSignIn上隐藏按钮,如果它是可见的,使用新的函数onFailedSignIn向gapi.signin2.render
添加一个'onfailure': onFailedSignIn
,如果它是隐藏的,它会显示该按钮。
这样,您就不会破坏Google隐藏的任何默认功能,但仍然可以在用户通过身份验证时隐藏按钮,并在用户未通过身份验证时显示按钮。
https://stackoverflow.com/questions/35983551
复制相似问题