2013-09-24 2 views
7

Я использую G + для входа на свой сайт, и я нашел эту проблему.Повторная пересылка вызова G + дважды

Мой сайт имеет панель инструментов (ее визуализации с Javascript) и G + кнопка Войти на это так, я придаю G + JavaScript API в файле панели инструментов

[панель-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> 

Когда панель инструментов (с G + JS API) загружена, она вызывает функцию обратного вызова render() для визуализации кнопки входа G +. Он работает очень хорошо, поэтому моя панель инструментов переходит в состояние входа в систему (показать профиль пользователя) и кнопку входа G + (HTML заменен).

Когда пользователь вышел из системы, измените состояние панели инструментов, чтобы не входить в систему (HTML заменен снова), он снова вызывает render(), и кнопка входа в систему работает.

Но проблема в том, что я вхожу на этот раз функцию обратного вызова (loginCallback()) , вызываемый дважды. Кажется, что функция обратного вызова снова связывается. (Я пытаюсь не вызывать render() во второй раз, но кнопка входа не работает.)

Есть ли способ исправить это? Спасибо.

+0

Вы пробовали проверить порядок, в котором выполняются все функции? Это довольно просто сделать, просто выведя имя функции в консоль в начале каждой функции. Это даст вам (и мне) некоторое представление о том, что именно происходит. Также: можете ли вы создать демонстрацию jsfiddle.net? Таким образом, мы можем попытаться найти код, который поможет вам. – Korijn

+0

Вы решили это? Если да, не могли бы вы поделиться решением? –

+1

Возможно, это связано с тем, что Google пытается включить автоматический вход в систему, когда вы подключены к вашему Google+ и ранее разрешили приложение. попробуйте протестировать его в инкогнито с отключенной учетной записью. –

ответ

1

Немного новичок здесь, но я помню, где-то читал, что есть случаи, когда вы можете случайно вызвать функцию вызова более одного раза, потому что у вас есть привязка к нескольким элементам. Вы пытались удалить обработчик событий непосредственно перед его объявлением?

Таким образом, если его уже есть экземпляр, он будет удален до добавления другого.

Нечто подобное

$('#randomID').unbind('submit').bind('submit'); 
Смежные вопросы