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.
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
Rozwiązałeś to? Jeśli tak, czy mógłbyś udostępnić rozwiązanie? –
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. –