Я задавался вопросом, нашел ли кто-нибудь обходное решение для поведения, которое я испытываю.
Возьмем пример кода ниже:
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '[----removed-------]', // App ID
channelUrl : 'http://localhost/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies
xfbml : true // parse XFBML
});
// Additional initialization code here
FB.Event.subscribe('auth.statusChange',fbLoginStatus);
console.log("getloginstatus");
FB.getLoginStatus(fbLoginStatus);
</script>
Используя FB.init со статусом, установленным в true, по существу вызывает getLoginStatus()
в соответствии с документацией facebook. Тем не менее, это явно предназначенное поведение, что это не вызовет событие auth.statusChange
, поскольку значение по умолчанию - "неизвестно", и. значение для "не входит в систему" также "неизвестно" (хотя это можно узнать!)
Поэтому мне нужно было сделать вызов FB.getLoginStatus()
явно, а также иметь статус, установленный в true, если я хочу также отвечать на пользователей, которые не вошли в систему в facebook.
Проблема заключается в том, что это приводит к тому, что функция вызывается дважды, если пользователь является чем-то другим, кроме "выведенным из системы".
Есть ли опрятный способ остановить это? Я думаю, что мой единственный вариант может состоять в том, чтобы вызвать другую функцию для обработки событий смены изменений.