Подтвердить что ты не робот

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

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

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

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

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

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

Спасибо

UPDATE: просто попробовал его в Chrome, и он работал (не знаю, почему он не работал раньше). Все еще не работает в IE

4b9b3361

Ответ 1

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

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

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

Без "force = true" иногда не срабатывает обратный вызов.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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