Facebook Javascript SDK窗口位置重新加载在Firefox上不起作用

Facebook Javascript SDK窗口位置重新加载在Firefox上不起作用,firefox,window,location,reload,facebook-javascript-sdk,Firefox,Window,Location,Reload,Facebook Javascript Sdk,我正在用FacebookConnect建立一个网站,因此使用了FacebookJavaScript SDK。 问题:使用Firefox时,一旦登录或注销,页面无法正确重新加载 FB.Event.subscribe( '{% if current_user %}auth.logout{% else %}auth.login{% endif %}', function(response){ window.location.reload(); }); 显然,这看起来像是

我正在用FacebookConnect建立一个网站,因此使用了FacebookJavaScript 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);
但问题仍然存在(我想是缓存…),你能帮我解决这个问题吗


谢谢。

我们正在使用与的变通方法

window.location.href = url;
而不是

window.location.replace(url);

在Firefox中也可以正常工作。

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

如果对此有任何混淆,对于Firefox,上面提到的
setTimeout()
示例非常有效。只需包括重新加载呼叫,或者如果更容易,只需更换:

document.location.reload();
与:


使用最新版本的Firefox,我已经测试了上面的每一个例子,这是唯一一个实际工作稳定的例子。基本上,您只需要“暂停”JavaScript片刻,让脚本的其余部分跟上。我没有在Chrome或IE上测试这一点,但它在Firefox上确实可以完美地工作。

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

每次尝试重定向到不同的URL:

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

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

对不起,我在Firefox(顺便说一句,在MAC上)上无法使用它。FB cookie未发送到此“登录url”。之后我仍然需要手动刷新…
window.location.reload(true)帮助?TADAAA!!谢谢。它解决了我在Firefox和Safari上的问题(我刚刚发现它曾经在Safari中引起无限循环…)嗯,很有趣!!介意扩展您的答案吗(添加一些资源等)?Bugzilla中有大量与潜在问题相关的错误报告,例如,只需搜索“事件登录”即可。如果您不确定包装的含义,请参阅下面的Chad帖子。hi@chwk我也有此问题,但settimeout并不能阻止ie上的事件发生,我甚至试着添加了超过0的时间,但似乎没有任何效果:有什么建议吗?thx为了更清楚地解释,我不确定“包装”的确切含义。
top.location.href = 'https://apps.facebook.com/YOUR_APP_NAME/?t=' + <?php echo time(); ?>;