2015-04-08 142 views
0

我正在使用Facebook的JavaScript SDK在我的應用程序中集成facebook登錄。 我在我的應用程序中有2個JS文件。如何檢查用戶已登錄Facebook?

  1. FacebookLogin.js
  2. content.js

現在我加載FacebookLogin.js在content.js。 而且我有下面的代碼在我FacebookLogin.js

var userID; 
window.fbAsyncInit = function() { 
    //SDK loaded, initialize it 
    FB.init({ 
     appId  : 'MY_APP_ID', 
     xfbml  : true, 
     version : 'v2.2' 
    }); 

    //check user session and refresh it 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      //user is authorized 
      userID = response.authResponse.userID; 
     } else { 
      document.getElementById('status').innerHTML = 'Please log into Facebook.'; 
     } 
    }); 
}; 

現在我想使用userID變量在我content.js文件。 ,這樣我可以檢查用戶是否已經登錄,像下面

if(userID === undefined && userID === null) 
    { 
     showSocialLoginPopup(); 
     return false; 
    } 

這裏showSocialLoginPopup()顯示器與如Facebook,Twitter等,現在不同的登錄選項的彈出如果用戶在隨後已經登錄我不想顯示該彈出窗口。

+0

總是嘗試不同的事情。例如,以常規方式加載兩個js文件(腳本標籤)。 – luschn

回答

1

這主要是一個關於範圍的問題。

所有的.js文件都將被加載到同一個DOM中,因此可以訪問跨文件的變量和函數等。

一種選擇是使用戶ID全局變量:

1)確保您的content.js加載您FacebookLogin.js後
2)聲明的任何職能之外的變量用戶ID或對象

這將讓你在任何地方訪問用戶ID在你的JavaScript

這是在JavaScript的變量範圍小教程:
http://www.w3schools.com/js/js_scope.asp

編輯: 另一個潛在的問題可能是時機。

FB.getLoginStatus()是一個異步調用,需要一段時間才能完成,直到調用完成後才能設置用戶ID。

如果你的content.js函數沒有落後於某種事件或超時,那麼在FB調用完成之前它可能正在執行,這意味着userID仍然是未定義的。

+0

我該如何讓FB.getLoginStatus()同步 – mahendrakawde

+0

如果我退出另一個,你可以嘗試[FB.getAuthResponse()](https://developers.facebook.com/docs/reference/javascript/FB.getAuthResponse) – jjroman

+0

標籤,那麼我怎麼能在我的網站得到通知 – mahendrakawde

相關問題