FB.getLoginStatus никогда не запускает функцию обратного вызова в JavaScript SDK Facebook.

Простой вызов FB.init (прямо перед </body>), а затем FB.getLoginStatus(callback) не запускает функцию обратного вызова.

После некоторой отладки я думаю, что SDK застрял в фазе «загрузки» (т.е. FB.Auth._loadState == 'loading') и никогда не «загружается», поэтому все обратные вызовы ставятся в очередь до тех пор, пока SDK не загрузится. Если я принудительно запускаю "загруженное" событие во время отладки - с FB.Event.fire('FB.loginStatus', 'loaded') на случай, если вам интересно, - тогда обратные вызовы вызываются правильно.

Дополнительные детали, которые могут иметь значение:

  1. Мое приложение представляет собой приложение facebook iframe (загружается через apps.facebook.com/myapp)
  2. Я использую IE9. То же самое происходит в Chrome
  3. Приложение размещено на http://localhost.

Что происходит? Почему SDK никогда не загружается?

Спасибо

ОБНОВЛЕНИЕ: только что попробовал в Chrome, и все заработало (не знаю, почему раньше не работало). Все еще не работает в IE


person Dan    schedule 21.04.2011    source источник
comment
Уф... после нескольких часов борьбы с этим... эээ... в любом случае, чтобы заставить его работать, я использовал подход с пользовательскими URL-адресами каналов, как описано в FB.init.   -  person Dan    schedule 21.04.2011
comment
Привет Дэн, извините за комментарий к этому старому вопросу, но у меня все еще есть эта проблема. Я пробовал с ChannelUrl (или с ChannelURL, зависит от того, какую страницу документов вы читаете), мой ChannelUrl находится на localhost:8080 потому что я разрабатываю на своей машине, но она все равно не работает. FB.login, FB.api и т. д. все работает правильно, не работает только FB.getLoginStatus. Можете ли вы опубликовать свой код? .. может быть есть какая-то тонкая разница   -  person Simone Gianni    schedule 07.11.2011


Ответы (6)


У меня была такая же проблема в Firefox 3.5 в Windows, но только при самом первом входе на страницу (вероятно, потому что это была более медленная машина и происходили какие-то странные проблемы с синхронизацией).

Я исправил это, заставив FB обновлять файл cookie состояния входа каждый раз, когда он проверяет:

FB.getLoginStatus(callback, true); //second argument forces a refresh from Facebook's server. 

Без «force=true» иногда не запускался обратный вызов.

person phreakhead    schedule 10.05.2011
comment
он все равно должен запускать обратный вызов только для кэшированной информации - person nav; 23.01.2012
comment
спасибо, альт :-) Я застрял за последние 4 часа :-) теперь все работает нормально - person Muhammad Danish; 21.11.2013

У меня была точно такая же проблема, и я решил ее, отключив «Безопасный просмотр» в настройках безопасности Facebook. Сохранение безопасного просмотра заставляет страницы использовать «https», но у меня не было настроено «URL-адрес безопасного холста», и это также дало мне много ошибок в консоли.

Надеюсь, это может помочь кому-то :)

person tyrion    schedule 22.10.2012
comment
Помните, что это происходит только в том случае, если вы используете приложение, которое не находится в безопасном соединении :) - person patrick; 23.10.2012

По моему опыту, getLoginStatus() никогда не вызывает обратный вызов в Firefox, когда сторонние файлы cookie отключены.

Первоначальный автор упомянул, что его приложение размещено на http://localhost. Мне никогда не везло с этим, и я считаю, что это вызовет проблемы.

Только сегодня у меня были проблемы, когда getLoginStatus не вызывает обратный вызов в любом браузере, если только пользователь не подключен к приложению! Я надеюсь, что это ошибка на Facebook, которую они исправят.

person Dave Cohen    schedule 13.12.2011
comment
Для справки в будущем это может произойти, если ваше приложение находится в режиме песочницы. - person Adam C; 16.12.2013

Еще одна возможность того, что FB.getLoginStatus не запускает свой обратный вызов, — это использование «тестовой» учетной записи пользователя, которая не авторизована для просмотра этого приложения. Очень плохо, что facebook не дает вам никаких сообщений об ошибках. Я также видел неудачные обратные вызовы для неверных appId и redirectUrls.

person trcarden    schedule 15.06.2012

Я также столкнулся с этой проблемой конкретно в Chrome. Я пытался вызвать его при загрузке страницы и после действия, инициированного пользователем, но безуспешно.

Оказалось, что это не междоменная проблема. Вызов getLoginStatus() блокировался расширением Un-Passwordise в Chrome. Как только я отключил расширение, оно отлично заработало даже при загрузке страницы.

Подробнее об этой проблеме можно узнать здесь: Ошибки междоменных сценариев только для Chrome в приложении Facebook iFrame при входе FB.(..)

person bluehazetech    schedule 22.01.2012

Я понимаю, что этот вопрос немного устарел, но я столкнулся с ним в поисках решений.

Дважды проверьте, что вы установили в конфигурации вашего приложения Facebook в разделе «Веб-сайт с входом через Facebook». Домен URL-адреса сайта должен совпадать с доменом, из которого обслуживается ваша страница с FB.getLoginStatus (и другим связанным с ней кодом аутентификации Javascript).

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

Другие ответы, вероятно, одинаково верны в вашем конкретном случае, но, поскольку могут быть другие, такие как я, которые какое-то время боролись с этим, надеюсь, это даст вам еще одно место для проверки. Создание нового приложения с правильным URL-адресом сайта было ответом в моем конкретном случае.

person Phil    schedule 24.07.2012