Facebook JS API - 页面保持清爽

时间:2012-12-16 17:44:01

标签: javascript facebook api

我使用Facebook JS SDK登录时遇到了一些问题。

好吧,当用户输入页面时,它会不断刷新 - window.location.reload();中的FB.Event.subscribe('auth.login'...被解雇,即使用户尚未登录。

这是我的剧本:

window.fbAsyncInit = function() {
    FB.init({
        appId   : '445298832195237', // App ID
        status  : true, // check login status
        cookie  : true, // enable cookies to allow the server to access the session
        xfbml   : true  // parse XFBML
    });

    FB.Event.subscribe('auth.login', function(response) 
    {
        $.ajax({async: false,
                type: 'GET',
                url: 'http://hfyt.pl/fb_register.php',
                success: function(data)
                {
                    //alert(data); 
                    window.location.reload();
                }
            });
        });
    };

你可以在http://hfyt.pl/试用它(只需使用一些调试器取消注释window.location.reload())。我正在使用Chrome。

2 个答案:

答案 0 :(得分:0)

据我所知,这就是发生的事情:

  1. 您的页面DOM加载
  2. JS SDK异步加载
  3. 一旦加载,就会检查登录状态
  4. connected状态,它刷新页面,步骤1-4。重复
  5. ..这发生在每个页面加载,而不仅仅是第一次。为了避免这种情况,我建议你..

    • 将状态存储在页面刷新后的状态,即localStorage
    • 或重写您的代码,以便id不依赖于window.document.reload()

答案 1 :(得分:0)

我认为您可能需要使用FB.getLoginStatus来检查人们是否在页面加载时登录。但是,请保留任何重定向。 https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

然后使用FB.Event.subscribe仅监听用户登录及其响应更改的时间。

FB.Event.subscribe('auth.authResponseChange', function(response) {  // reload here });

我认为那样做。