Как я могу запретить запуск функции Facebook Connect isUserConnected дважды в jQuery?

StackOverflow https://stackoverflow.com/questions/613612

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня небольшая проблема с интеграцией в Facebook.

Когда мои пользователи нажимают на ссылку, функция проверяет, вошел ли пользователь в Facebook. Если они не вошли в систему, я устанавливаю часть данных, а затем запускаю вход в Facebook. Когда Facebook возвращается, что они входят в систему, я проверяю часть данных, которые были сохранены, и запускаю оригинальную функцию, которую они выбрали.

Проблема:

Функция Facebook запускается дважды. Есть несколько комментариев на их досках объявлений об этой проблеме, но кажется, что это была проблема с начала подключения, и она не решается.

Итак, я не хочу ждать Facebook. Есть ли способ для меня, чтобы функция не вызывала мою функцию более одного раза?

Могу ли я установить что-то с надписью «беги один раз»? Проблема заключается в том, что после однократного запуска, если пользователь нажимает снова, мне нужно будет запустить его снова, поэтому я не могу полностью отключить функцию (даже если это было возможно).

Это было полезно?

Решение

Это довольно хакерская штука, но это должно обойти проблему Facebook, вызывающего вашу функцию дважды. Так как кода нет, я собираюсь придумать его для целей моего решения. Кроме того, я предполагаю, что у кода входа в Facebook есть обратный вызов (как еще он будет вызывать вашу функцию дважды?).

// This function is what is called when the link is clicked
// funToRun - the function that should be run after login is confirmed.
// params - parameters to pass to fToRun, as an array
clickWrapper = function(funToRun, params)
{
    // Keeps track of the state of the click
    var doFunction = true;

    var callback = function()
    {
        if (doFunction)
        {
            funToRun.apply(this, params);
            doFunction = false;
        }
    }

    // The facebook 
    facebookLogin(callback);
}

В этом решении вы оборачиваете функцию, которую вы хотите запустить, в обратный вызов, который будет запускаться только один раз, так как doFunction не позволит будущим обратным вызовам делать что-либо. Тем не менее, он будет запускаться как минимум один раз каждый раз, когда пользователь щелкает, так как doFunction управляется локально (и, следовательно, имеет значение true один раз для каждого клика).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top