Javascript 异步facebook函数

Javascript 异步facebook函数,javascript,asynchronous,facebook-like,facebook-javascript-sdk,Javascript,Asynchronous,Facebook Like,Facebook Javascript Sdk,当javascript函数完成时,我似乎对正确的顺序有一些问题。 我有一个页面可以检查用户是否登录到facebook。如果有人登录,它将注销该人,并重定向到包含like按钮的其他页面。 但是,当我在没有重定向的情况下运行网页时,用户会正确注销。如果重定向已就位,则不再强制注销 您可以在此网站上测试代码: var loggedout=false; window.fbAsyninit=函数(){ FB.init({ appId:'xxxxxxxxxxxx',//应用程序ID channelUrl:

当javascript函数完成时,我似乎对正确的顺序有一些问题。 我有一个页面可以检查用户是否登录到facebook。如果有人登录,它将注销该人,并重定向到包含like按钮的其他页面。 但是,当我在没有重定向的情况下运行网页时,用户会正确注销。如果重定向已就位,则不再强制注销

您可以在此网站上测试代码:


var loggedout=false;
window.fbAsyninit=函数(){
FB.init({
appId:'xxxxxxxxxxxx',//应用程序ID
channelUrl:“”,//通道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
fbApiInit=true;
}; 
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/nl_nl/all.js#xfbml=1&appId=511896318825154”;
ref.parentNode.insertBefore(js,ref);
}(文件);
函数fbEnsureInit(回调) { 如果(!window.fbApiInit){ setTimeout(函数(){fbEnsureInit(回调);},50); }否则{ 如果(回调){ 回调(); } } } 函数fbEnsureLogout(回调) { 如果(!window.loggedout){ setTimeout(函数(){fbEnsureLogout(回调);},50); }否则{ 如果(回调){ 回调(); } } } fbEnsureInit(函数() { log(“这将在FB初始化后运行”); 检查注销(); }); fbEnsureLogout(函数() { log(“如果确保注销,将运行此命令”); window.location=”http://quiet-depths-9481.herokuapp.com/like.php" 文件。写(“”); }); 函数checkLogout() { console.log('checkLogout'); FB.getLoginStatus(函数(响应) { 如果(response.status===“已连接”) { var uid=response.authResponse.userID; var accessToken=response.authResponse.accessToken; console.log(“登录并验证”); log('正在尝试立即注销'); FB.注销(功能(响应) { console.log('LOGGED OUT!'); loggedout=true; }); } else if(response.status===“未授权”) { log('已登录但未进行身份验证'); log('正在尝试立即注销'); FB.注销(功能(响应) { console.log('LOGGED OUT!'); loggedout=true; }); } 其他的 { log('未登录到facebook!'); loggedout=true; } }); }
我相信,如果没有facebook用户使用你的应用程序进行身份验证,你就不能注销他们。你可以在控制台中直接阅读,facebook的all.js返回

FB.logout() called without an access token. 
这意味着您必须调用它们的api(FB.login或FB.getLoginStatus)。无论哪种方式,如果您的应用程序/站点没有适当的用户授权,您都无法获得访问令牌


你必须让用户使用你的应用程序登录,然后注销。这可能对你有用,因为你是应用程序的所有者,所以基本上你是通过应用程序连接的。

谢谢你的回答,因为我无法强迫用户注销,所以我尝试了更微妙的方式。谢谢
    function fbEnsureInit(callback) 
   {
      if(!window.fbApiInit) {
          setTimeout(function() {fbEnsureInit(callback);}, 50);
      } else {
          if(callback) {
              callback();
          }
      }
   }

   function fbEnsureLogout(callback) 
   {
      if(!window.loggedout) {
          setTimeout(function() {fbEnsureLogout(callback);}, 50);
      } else {
          if(callback) {
              callback();
          }
      }
   }

   fbEnsureInit(function()
   {
      console.log("this will be run once FB is initialized");
      checkLogout();
   });

   fbEnsureLogout(function()
   {
    console.log("this will run if logout is ensured");
    window.location = "http://quiet-depths-9481.herokuapp.com/like.php"
    document.write('<div class="fb-like" data-href="https://www.facebook.com/accentjobs" data-width="450" data-show-faces="true" data-stream="true" data-header="true"></div>');
   });

   function checkLogout()
   {
     console.log('checkLogout');
     FB.getLoginStatus(function(response) 
     {
       if (response.status === 'connected')          
       {
         var uid = response.authResponse.userID;
         var accessToken = response.authResponse.accessToken;
         console.log('logged in & authenticated');
         console.log('trying to logout now.');
         FB.logout(function(response) 
         {  
           console.log('LOGGED OUT!');
           loggedout = true;
         });
       } 
       else if (response.status === 'not_authorized') 
       {
         console.log('logged in but no authentication');
         console.log('trying to logout now.');
         FB.logout(function(response) 
         {  
           console.log('LOGGED OUT!');
           loggedout = true;
         });
       }
       else
       {
         console.log('Not logged in to facebook!');
         loggedout = true;
       }
     });
   }  
</script> 
FB.logout() called without an access token.