0

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

window.location.reload();好吧,当用户进入页面时,它会不断刷新 -FB.Event.subscribe('auth.login'...即使用户尚未登录,也会触发 in 。

这是我的脚本:

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。

4

2 回答 2

0

据我了解,这就是正在发生的事情:

  1. 您的页面 DOM 加载
  2. JS SDK 异步加载
  3. 加载后,它会检查登录状态
  4. connected状态上,它会刷新页面,并执行步骤 1-4。重复

..这发生在每次页面加载时,而不仅仅是第一次。为了避免这种情况,我建议你..

  • 要么将状态存储在页面刷新后幸存的东西中,即 localStorage
  • 或重写您的代码,使 id 不依赖于 window.document.reload()
于 2012-12-16T19:49:29.623 回答
0

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

然后使用 FB.Event.subscribe 仅监听用户何时登录并且他们的响应发生变化。

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

我想这样就可以了。

于 2012-12-17T04:36:25.023 回答