2013-09-24 6 views
7

Ich benutze G + anmelden für meine Website und ich habe dieses Problem gefunden.G + Anmeldung Button Callback Bindung zweimal

Meine Website hat Symbolleiste (sein mit Javascript Render) und G + Login-Button auf, so lege ich G + Javascript-API in der Symbolleiste Datei

[toolbar-notlogin.php]

<script> 
(function() { 
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; 
po.src = 'https://apis.google.com/js/plusone.js?onload=render'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); 
})(); 

function render() 
{ 
     var config = { 
      "callback": "loginCallback", 
      "clientid": "xxxxxxxxx.apps.googleusercontent.com", 
      "cookiepolicy": "single_host_origin", 
      "requestvisibleactions": "http://schemas.google.com/AddActivity", 
      "scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email" 
      }; 

      $('#googleCustomLoginBtn .buttonText').text('Login with Google'); 
      gapi.signin.render ("gplusLoginBtn", config); 
     } 
</script> 

Wenn die Symbolleiste (mit G + JS API) geladen es ruft Callback-Funktion render() zum Rendern der G + Anmelde-Schaltfläche. Es funktioniert sehr gut, so dass meine Symbolleiste in den Anmeldungszustand wechselt (Profil des Benutzers anzeigen) und G + Anmelde-Taste weg ist (HTML ersetzt).

Wenn Benutzer abmelden die Status ändern, um sich nicht einzuloggen (HTML ersetzt erneut), rufen Sie render() erneut auf und die Schaltfläche Anmelden funktioniert.

Aber das Problem ist, wenn ich mich in dieser Zeit die Callback-Funktion anmelden (loginCallback()) zweimal aufgerufen. Es sieht so aus, als ob die Callback-Funktion erneut gebunden wird. (Ich versuche, render() nicht zum zweiten Mal aufrufen, aber die Schaltfläche Anmelden funktioniert nicht.)

Gibt es eine Möglichkeit, es zu beheben? Vielen Dank.

+0

Haben Sie den Auftrag versucht, Kontrolle, in der alle Funktionen ausgeführt werden? Es ist ziemlich einfach zu tun, indem Sie einfach den Funktionsnamen zu Beginn jeder Funktion an die Konsole ausgeben. Es gibt Ihnen (und mir) mehr Einblick in was genau Happing ist. Außerdem: Kannst du eine jsfiddle.net Demo erstellen? Auf diese Weise können wir tatsächlich versuchen, einen Code zu entwickeln, der Ihnen hilft. – Korijn

+0

Haben Sie das gelöst? Wenn ja, könnten Sie bitte die Lösung teilen? –

+1

Dies könnte daran liegen, dass Google eine automatische Anmeldung versucht, wenn Sie mit Ihrem Google+ Konto verbunden sind und die App zuvor autorisiert haben. Testen Sie es inkognito mit Ihrem Konto abgemeldet. –

Antwort

1

Ein wenig Neuling hier, aber ich erinnere mich, irgendwo zu lesen, dass es Fälle gibt, in denen Sie versehentlich die Funktion mehr als einmal aufrufen können, weil Sie es an mehr als ein Element gebunden haben. Haben Sie versucht, den Event-Handler direkt vor der Deklaration zu entfernen?

Auf diese Weise wird, wenn es bereits eine Instanz davon gibt, diese entfernt, bevor eine weitere hinzugefügt wird.

So etwas

$('#randomID').unbind('submit').bind('submit');