我使用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);
但问题仍然存在(我猜的缓存......)你可以帮我解决这个问题吗?
感谢。
答案 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))。