2012-10-04 37 views
1

我遇到了在Safari和IE登錄到Facebook的問題。我可以登錄就好了與Chrome和Firefox用下面的代碼:Facebook的JavaScript SDK連接失敗在IE和Safari

 var appId = 'APP ID'; 
    var uid; 

    // Initialize the JS SDK 
    FB.init({ 
    appId: appId, 
    status: true, // check login status 
    cookie: true, // enable cookies to allow the server to access the session 
    xfbml: true, // parse XFBML 
    channelUrl: '//localhost:8888/photo/channel.html' // Channel File 
    }); 
    // Get the user's UID 
    FB.getLoginStatus(function(response) { 
    uid = response.authResponse.userID ? response.authResponse.userID : null; 
    console.info(uid); 
    }); 

    function authUser() { 
    FB.login(function(response) { 
     console.info(response); 
     uid = response.authResponse.userID ? response.authResponse.userID : null; 
     console.info("called"); 
    }, {scope:'email,publish_actions'}); 

但是當我的代碼獲取到FB.getLoginStatus在Safari和IE瀏覽器的響應顯示

authResponse: undefined 
status: "unknown" 

編輯:忘了提,彈出這表明權限不會在Safari和IE中彈出。

+0

如何/在哪裏將您的函數稱爲「authUser」? – CBroe

+0

我不會在我的代碼中調用它。我想到Facebook照顧了它。 –

回答

1

如果狀態爲「未知」,這意味着兩件事情之一:

  1. 用戶沒有登錄,或
  2. 第三第三方cookies被禁用

Safari瀏覽器是唯一一個默認禁用第三方cookie的瀏覽器(Firefox將很快適用)。 IE中一些較高的安全設置也會關閉它們。由於你的代碼在Firefox/Chrome中工作,我猜這是罪魁禍首。

不幸的是,FB.getLoginStatus需要第三方cookie才能返回適當的authResponse和狀態。我覺得你的選擇是相當有限的:

  1. 讓用戶通過PHP或其他後端SDK登錄,並迫使他們重新登錄,每2小時(我認爲FB令牌的有效期爲每7600秒)
  2. 檢測「未知」狀態並向用戶顯示一條消息,要求他們爲facebook.com啓用第三方cookie
0

我沒有真正解決這個問題,我可以通過在Facebook上運行應用程序而不是我的本地主機來解決問題。我相信這是因爲當在Facebook上我已經登錄