代码之家  ›  专栏  ›  技术社区  ›  Doug Molineux

Facebook注销混乱

  •  2
  • Doug Molineux  · 技术社区  · 16 年前

    我有一个奇怪的问题,我有一个注销链接,只有当用户登录时才会显示。我在这个链接的onclick事件中有这个代码(使用函数):

        FB.logout();
        window.location = 'http://www.google.com';
    

    如果我单击这个按钮一次,什么都不会发生,我知道这个函数会被执行,因为我已经用一个警报测试了它。但是,如果我第二次单击它,页面就会重新加载,用户实际上已经注销了。页面从未指向google.com,因此函数永远不会到达window.location部分。

    我有window.location,因为我认为如果我可以使用window.location.refresh刷新页面,一旦注销完成,它就会成功地将用户注销。然而,如果有人有任何其他的技术,如何注销用户的Facebook,我会很高兴听到他们!我已经尝试手动删除cookie,但是没有成功,因为某种原因cookie仍然存在。我也尝试过:

        FB.logout(function(response) {
        window.location = 'http://www.google.com';
        });
    

    我知道这样的回调是可能的,因为文档:

    http://developers.facebook.com/docs/reference/javascript/FB.logout
    

    以前有人有过这个问题吗?任何建议都会有帮助的,谢谢!

    更新:经过一些调试,我发现如果我单击一次链接。然后手动刷新它注销用户的页面。

    2 回复  |  直到 15 年前
        1
  •  2
  •   serg    16 年前

    从您的描述来看,我认为注销工作正常,但页面刷新不正常。

    尝试这样的方法可能:

    FB.logout(function(response) {
        window.location.reload(true);
    });
    
        2
  •  0
  •   Michael Phillips    15 年前

    您可以尝试在回调函数中放置一个警报,以查看fb.logout是否真的完全成功。

    我最初把fb.logout直接放在一个锚链接的onclick事件中,虽然它在FF和Chrome中工作,但在IE或我的Android浏览器中不工作。

    FF和Chrome将足够快地执行fb.logout调用以使其正常工作,但IE和移动浏览器(由于网络速度以及javascript引擎的差异)将无法在浏览器加载您要重定向到的任何页面之前成功完成调用。

    我想我正在做和你做的完全一样的事情,这段代码对我很有用:

    function mysignout(url)
    {
        FB.logout(function()
        {
            top.location.href = 'url';
        });
    }
    

    令人惊讶的是,在大多数环境中,fb.logout需要2+秒才能完全成功。显然有某种Ajax调用涉及到撤销服务器上的身份验证,而不仅仅是破坏本地cookie。

    推荐文章