2013-09-24 5 views
7

Używam logowania G + dla mojej witryny i znalazłem ten problem.2-krotne podwójne wywołanie wywołania G + button

Moja strona posiada pasek (jego render z JavaScript) i G + przycisk logowania na nim więc załączam G + JavaScript API w pliku paska narzędzi

[Pasek-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> 

Kiedy pasek narzędzi (z G + JS API) załadowany wywołuje funkcję wywołania zwrotnego render() w celu renderowania przycisku logowania G +. Działa bardzo dobrze, więc mój pasek narzędzi zmienia się w stan logowania (pokaż profil użytkownika) i przycisk logowania G + zniknął (zastąpiony HTML).

Gdy użytkownik wyloguje się z paska narzędziowego, zmienia stan, aby się nie logować (ponownie zamieniony HTML) ponownie wywołuje metodę render(), a przycisk logowania działa.

Ale problem występuje, gdy zaloguję się w tym czasie funkcja wywołania zwrotnego (loginCallback()) o nazwie dwa razy:. Wygląda na to, że funkcja wywołania zwrotnego znowu się powiąże. (Próbuję nie wywoływać render() po raz drugi, ale przycisk logowania nie działa.)

Czy istnieje sposób, aby to naprawić? Dziękuję Ci.

+0

Czy próbowałeś sprawdzając kolejność, w której wszystkie funkcje są wykonywane? Można to łatwo zrobić po prostu wypisując nazwę funkcji do konsoli na początku każdej funkcji. Da ci to (i mnie) więcej wglądu w to, co dokładnie się dzieje. Ponadto: możesz utworzyć demo jsfiddle.net? W ten sposób możemy spróbować wymyślić jakiś kod, który ci pomoże. – Korijn

+0

Rozwiązałeś to? Jeśli tak, czy mógłbyś udostępnić rozwiązanie? –

+1

Może to być spowodowane tym, że Google automatycznie loguje się, gdy masz połączenie z Google+ i wcześniej autoryzowałeś aplikację. spróbuj przetestować go w trybie incognito, gdy Twoje konto zostanie wylogowane. –

Odpowiedz

1

Nieco nowicjusz tutaj, ale pamiętam, że przeczytałem gdzieś, że są przypadki, kiedy możesz przypadkowo zadzwonić do funkcji więcej niż jeden raz, ponieważ masz to związane z więcej niż jednym elementem. Czy próbowałeś usunąć moduł obsługi zdarzenia bezpośrednio przed jego zadeklarowaniem?

W ten sposób, jeśli istnieje już jego instancja, zostanie ona usunięta przed dodaniem kolejnej.

Coś takiego

$('#randomID').unbind('submit').bind('submit'); 
Powiązane problemy