Facebook Connect - после входа всплывающее окно зависает в бесконечном цикле
Симптом: после подключения открывается всплывающее окно, и пользователь вводит имя пользователя + пароль. Всплывающее окно становится пустым и остается открытым.
Нет вызова функции входа в систему (но обновление страницы показывает, что куки установлены и пользователь фактически вошел в систему).
Я отладил код и обнаружил, что файл xdcommReceiver.js застрял в бесконечном цикле в функции dispatchMessage.
Дальнейшее расследование показывает, что в строке происходит исключение:
func = hostWindow.FB.XdComm.Server.singleton.onReceiverLoaded;
Исключением является "Отказано в доступе http://www.example.org/ для получения свойства Window.FB от http://example.org/".
Как мне это решить?
Дополнительная информация:
URL подключения к сайту: http://www.example.org/. Страница, на которой это происходит, имеет следующий формат: http://www.example/org/folder/folder2/
5 ответов
Решение было добавить document.domain=site.com
в xd_received.htm
файл (он спрятан где-то в вики-документации Facebook).
Эта проблема также возникает, когда некоторый код JavaScript меняет домен. Например, ваша страница в Axcom. Тогда скрипт на странице делает что-то вроде
<script>
document.domain = "x.com";
<script>
Ваш домен изменен, и эта проблема появляется.
Для тех, кто имеет проблему с циклом и использует пример кода со страниц разработчиков Facebook API, у меня есть совет:
У меня такая же проблема. Что я сделал неправильно, так это то, что когда я модифицировал скрипт под свои нужды, я случайно заменил cookie
с _cookie
- это изменило переменную "cookie: true" и сделало бесконечный цикл.
FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true, _cookie: true, xfbml: true});
Строка должна сказать:
FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true});
Я надеюсь, что это помогает некоторым...
Я опубликовал http://forum.developers.facebook.com/viewtopic.php?pid=201495 несколько дней назад, и эта модификация - единственный найденный мной способ заставить его работать.
Сохраняя оригинальный файл xd_receiver.htm, даже указав полный путь, я просто не могу опубликовать свой сайт. Если вы видите, как я могу что-то настроить (посмотрите мой пост, пожалуйста), чтобы оно работало без изменений, скажите, пожалуйста!
Попробуйте использовать файл xd_receiver, а не делать его доступным с помощью скрипта. Также убедитесь, что ваша страница может найти файл xd_receiver. Чтобы избежать каких-либо проблем, вы можете указать полный путь к файлу xd_receiver, например, в своем коде:
www.yoursite.com/xd_receiver.htm