Facebook Javascript SDK窗口位置重新加载在Firefox上不起作用
我正在用FacebookConnect建立一个网站,因此使用了FacebookJavaScript 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(); }); 显然,这看起来像是
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(); ?>;