Facebook Javascript SDK窗口位置重新加载不适用于Firefox

时间:2011-09-26 09:20:31

标签: firefox window location reload facebook-javascript-sdk

我使用Facebook Connect构建网站,因此使用Facebook Javascript SDK。 问题:使用Firefox时,登录或退出后页面无法正常重新加载。

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

显然,它看起来像一个已知问题(只需键入"窗口位置重新加载不能在firefox&#34上运行;并且你会得到很多结果)

更确切地说,Firefox在重新加载页面时似乎没有发送正确的cookie ...
  - 当我点击登录时,一旦Facebook登录并设置了cookie,Firefox就不会发送任何cookie   - 当我点击退出时,一旦Facebook将我退出并删除了cookie,Firefox就会发送之前存在的cookie 我的结论是它使用了一些"缓存功能"。

我尝试按照here所述制定解决方法,并实施了这个:

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

但问题仍然存在(我猜的缓存......)你可以帮我解决这个问题吗?

感谢。

5 个答案:

答案 0 :(得分:13)

尝试使用零延迟在setTimeout()中包装window.location.reload()。显然,Firefox会在设置cookie之前触发事件。包装应该将重载调用放在事件队列中,并允许正确设置cookie。

答案 1 :(得分:3)

如果对此更加困惑,对于Firefox,上面引用的setTimeout()示例完美无缺。只需包含您的重新加载电话,或者如果更容易更换:

document.location.reload();

使用:

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

使用最新版本的Firefox发布,我已经测试了上面的每个例子,这是唯一一个实际上一致工作的例子。基本上,你只需要暂停“暂停”一段时间,让脚本的其余部分赶上来。我没有在Chrome或IE上测试过这个,但它在Firefox上运行得很完美。

答案 2 :(得分:0)

我们正在使用

解决方法
window.location.href = url;

而不是

window.location.replace(url);

也适用于Firefox。

答案 3 :(得分:0)

对于使用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

答案 4 :(得分:0)

每次尝试重定向到其他网址:

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

,我使用PHP,但你可以用JS代替(Math.round(+ new Date()/ 1000))。