Я задавался вопросом, нашел ли кто-нибудь обходной путь к поведению, которое я испытываю.
Возьмем пример приведенного ниже кода:
<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.
Проблема в том, что это приводит к тому, что функция вызывается дважды, если пользователь не "вышел из системы".
Есть ли аккуратный способ остановить это? Я думаю, что моим единственным вариантом может быть вызов другой функции для обработки событий изменения аутентификации.
status:true
действительно полезен. они говорят: «Если вы установите для статуса значение true в вызове FB.init(), SDK попытается получить информацию о текущем пользователе сразу после инициализации. Это может сократить время, необходимое для проверки состояния вошедшего в систему пользователя, если вы используете вход через Facebook, но бесполезно для страниц, на которых есть только социальные плагины». значит ли это, что ответ кэшируется? - person Simon_Weaver   schedule 26.05.2015