Nano Hash - криптовалюты, майнинг, программирование

Обратный вызов кнопки входа в G+ привязывается дважды

Я использую вход G+ для своего веб-сайта и обнаружил эту проблему.

На моем веб-сайте есть панель инструментов (она отображается с помощью Javascript) и кнопка входа в G+, поэтому я прикрепляю API G+ Javascript в файле панели инструментов.

[панель инструментов-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() во второй раз, но кнопка входа не работает.)

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

24.09.2013

  • Вы пробовали проверить порядок выполнения всех функций? Это довольно просто сделать, просто выведя имя функции на консоль в начале каждой функции. Это даст вам (и мне) больше информации о том, что именно происходит. Также: можете ли вы создать демонстрацию jsfiddle.net? Таким образом, мы действительно можем попытаться придумать какой-нибудь код, который вам поможет. 21.01.2014
  • Вы решили это? Если да, не могли бы вы поделиться решением? 27.01.2014
  • Это может быть связано с тем, что Google пытается выполнить автоматический вход, когда вы подключены к Google+ и предварительно авторизовали приложение. попробуйте протестировать его в режиме инкогнито, выйдя из своей учетной записи. 19.02.2014
  • Наконец-то я нашел причину, потому что, когда я снова вышел из системы, файл [toolbar-notlogin.php] был помещен так, что G + SDK инициализировался во второй раз. Каждый раз они вызывают render(), поэтому функция вызывается дважды. Чтобы решить эту проблему, я поместил G+ SDK в статический HTML, который отображается только один раз. и когда моя панель инструментов визуализирует [toolbar-notlogin.php], я вручную вызываю render() с помощью своего JS-кода. Спасибо вам всем. :) 04.03.2014
  • ответил здесь: stackoverflow.com/ вопросы/20487092/ 18.02.2015

Ответы:


1

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

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

Что-то вроде этого

$('#randomID').unbind('submit').bind('submit');
21.02.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..