执行页面刷新时不调用FB.getLoginStatus(Facebook Javascript SDK)

我正在尝试使用他们的
Javascript SDK实现一个与用户的Facebook个人资料相关联的网页.

在他们的初始文件后:

<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
  FB.init({appId: '[my-appid]', status: true, cookie: true, xfbml: true});
  //Check if user is logged-in to facebook:
  FB.getLoginStatus(function(response) {
     if (response.session) {
         // Here I use some FB.api functions 
         // and get some data I need about the user's facebook profile,
         // and make same changes to the document html accordingly...
     }

  });
};

(function() {
  var e = document.createElement('script'); 
  e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
  e.async = true;
  document.getElementById('fb-root').appendChild(e);
}());

</script>

FB.inLoginStatus函数是在FB.init之后编写的,正如他们建议的那样.
我第一次加载页面时一切正常.但是,如果我点击刷新(F5) –
然后FB.getLoginStatus永远不会被调用!因此不收集所需的信息.
如果我在FB.init之后立即发出“警报” – 它可以工作,我看到它.
如果我在FB.getLoginStatus中放置一个“警报”,那么它就不起作用了.
如果我执行“无缓存刷新”(使用Ctrl-F5而不是F5) – 那么一切正常.

这是为什么?我该如何让它按预期工作?

谢谢.

最佳答案 我试图解决这个问题时遇到了同样的问题. FB.init是异步的,警报引起足够的延迟以使所有内容初始化. FB.getLoginStatus最有可能被调用,但是错误输出.您是否在错误控制台中看到任何错误?您可能会在init之前看到有关调用FB.getLoginStatus的错误.

另一种可能性是你将xfbml设置为true. Facebook似乎有时会进行双重初始化,导致您对init的调用失败.尝试将xfbml设置为false.如果需要在页面上呈现FBML,请呈现特定元素.

FB.XFBML.parse(document.getElementById('idOfElement'));
点赞