2013-01-21 117 views
0

我正在嘗試在我的網頁上實現Facebook Connect登錄,並且下面您有我的(窮人)嘗試到目前爲止。退出按鈕問題

  • 如果被註銷登錄按鈕顯示,如假設。
  • 如果點擊登錄按鈕,Facebook登錄彈出窗口出現,如假設。
  • 如果彈出窗口中的登錄消失,用戶登錄並且該按鈕變爲註銷按鈕。

  • 如果點擊退出按鈕,用戶被註銷,但!:

    1. 按鈕沒有得到改變登錄按鈕。
    2. 有時最多打開三個彈出窗口(登錄)。
    3. 函數testAPI()被執行。
    4. 有時會在控制檯中顯示以下錯誤消息:「由於X-Frame-Options禁止顯示,拒絕顯示文檔。」

JS:

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

    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
     showLogoutButton(); 
     } else if (response.status === 'not_authorized') { 
     showLoginButton(); 
     } else { 
     showLoginButton(); 
     } 
    }); 
    }; 

    function showLoginButton() { 
    $('#FBButtonDiv').show(); 

    $('#FBButton').html('Log in Facebook'); 
    $('#FBButton').on('click', function(){ 
     login(); 
    }); 
    } 

    function showLogoutButton() { 
    $('#FBButtonDiv').show(); 

    $('#FBButton').html('Log out Facebook'); 
    $('#FBButton').on('click', function(){ 
     logout(); 
    }); 
    } 

    function login() { 
     FB.login(function(response) { 
      if (response.authResponse) { 
       // connected 
       testAPI(); 
       showLogoutButton(); 
      } else { 
       // cancelled 
      } 
     }); 
    } 

    function logout() { 
    FB.logout(function(response) { 
     showLogoutButton(); 
    }); 
    } 

    function testAPI() { 
     console.log('Welcome! Fetching your information.... '); 
     FB.api('/me', function(response) { 
      console.log('Good to see you, ' + response.name + '.'); 
     }); 
    } 

    (function(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/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 

HTML:

... 
<div id="FBButtonDiv"><button id="FBButton">Facebook login!</button></div> 
... 

CSS:

#FBButtonDiv { 
    display: none; 
} 

那麼,我的代碼有什麼問題?

注意:我知道代碼中包含了很多DRY,但是當我使用它的時候我會做很多重構。

回答

1

不是特別我的特長,JS/FB-API,但我猜想:

function logout() { 
    FB.logout(function(response) { 
    showLogoutButton(); 
    }); 
} 

應該是:

function logout() { 
    FB.logout(function(response) { 
    showLoginButton(); 
    }); 
} 

由於後的反應是收到,回調應該是顯示了登錄按鈕到現在註銷的用戶。當然,您應該檢查類似的登錄響應來確認登出是否成功。

+0

非常感謝,完全錯過了:-)有沒有關於錯誤信息的其他想法,以及彈出窗口有時被加載2-3次? – holyredbeard

+0

作爲一個純粹的猜測,我會檢查jQuery API,看看您是否實際註冊了多個onClick()處理程序,而不是替換最後一個。 –