Как я могу запретить запуск функции Facebook Connect isUserConnected дважды в jQuery?
Вопрос
У меня небольшая проблема с интеграцией в 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 один раз для каждого клика).