Перезагрузка местоположения окна Facebook Javascript SDK не работает в Firefox - PullRequest
5 голосов
/ 26 сентября 2011

Я создаю веб-сайт с Facebook Connect и, следовательно, использую Facebook Javascript SDK. Проблема: при использовании Firefox, страница не перезагружается должным образом после входа или выхода из системы.

FB.Event.subscribe(
   '{% if current_user %}auth.logout{% else %}auth.login{% endif %}',
    function(response){
        window.location.reload();
});

Очевидно, это похоже на известную проблему (просто введите «перезагрузка расположения окна не работает в Firefox», и вы получите много результатов)

Точнее, Firefox, похоже, не отправляет нужный файл cookie при перезагрузке страницы ...
- Когда я нажимаю, чтобы войти, после того, как Facebook зарегистрировал меня и установил файл cookie, Firefox не отправляет файл cookie.
- Когда я нажимаю, чтобы выйти из системы, после того, как Facebook вывел меня из системы и удалил файл cookie, Firefox отправляет файл cookie, который был ранее там.
Я пришел к выводу, что он использует некоторые "функции кэширования".

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

redirect_url = encodeURIComponent(window.location.href);
url = window.location.href + "account/login?redirect_url=" + redirect_url;
window.location.replace(url);

Но проблема остается (кэш, я думаю ...) Можете ли вы помочь мне с этим?

Спасибо.

Ответы [ 5 ]

13 голосов
/ 26 сентября 2011

Попробуйте обернуть вызов window.location.reload () в setTimeout () с нулевой задержкой.По-видимому, Firefox запускает событие перед установкой файла cookie.Обтекание должно поместить вызов перезагрузки в очередь событий и позволить правильно установить файлы cookie.

3 голосов
/ 07 ноября 2011

В этом случае возникла путаница, для Firefox приведенный выше пример setTimeout() работает отлично. Просто включите ваш повторный вызов или, если проще, замените:

document.location.reload();

с:

setTimeout('document.location.reload()',0);

Используя самую последнюю версию Firefox, я протестировал каждый приведенный выше пример, и это единственный, который действительно работал последовательно. По сути, вам просто нужно «приостановить» JavaScript на мгновение, чтобы остальная часть сценария наверстала упущенное. Я не проверял это на Chrome или IE, но на Firefox он работает безупречно.

0 голосов
/ 14 марта 2014

Попробуйте каждый раз перенаправлять на другой URL:

top.location.href = 'https://apps.facebook.com/YOUR_APP_NAME/?t=' + <?php echo time(); ?>;

, я использую PHP, но вы можете заменить его на JS (Math.round (+ new Date () / 1000), я думаю).

0 голосов
/ 21 ноября 2011

Для тех, кто использует Rails и Koala, вы можете просто проверить файлы cookie и перенаправить на те же действия, если они отсутствуют:

def fb_authenticate
  @fb_cookies ||= Koala::Facebook::OAuth.new.get_user_info_from_cookie(cookies)
  if @fb_cookies
    #login user or create new user
  else
    redirect_to :controller => 'account', :action => 'fb_authenticate'
  end
end
0 голосов
/ 26 сентября 2011

Мы используем обходной путь с

window.location.href = url;

вместо

window.location.replace(url);

Прекрасно работает и в Firefox.

...