2012-06-12 107 views
1

這是我的Facebook連接代碼:FB.Event.subscribe不會被調用

<script> 
jQuery(document).ready(function($){ 
    $(".fb-login-button").live('click', function() { 
     console.log('click'); 
     fbEnsureInit(function() { 
     console.log('EnsureInit'); 
     FB.login(function(response) { 
      console.log('FB.login'); 
      // redirect will be done 
     }, {scope: 'email'}); 
     }); 
    }); 
}); 

window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : '105224616211361', // App ID 
    /*channelUrl : '///channel.html', // Channel File // We don't do not to get caching problems with the laguage!*/ 
    status  : true, // check login status 
    cookie  : true, // enable cookies to allow the server to access the session 
    oauth  : true, // enable OAuth 2.0 
    xfbml  : true // parse XFBML 
    }); 
    // Additional initialization code here 
    fbApiInitialized = true; 

    // whenever the user logs in, we refresh the page 
    FB.Event.subscribe('auth.login', function(response) { 
    try { 
     if (response.status == 'connected') { 
     console.log('connected'); 
     $.ajax({ 
     type: "POST", 
     url: "/?eID=login&modus=facebook&fb-login=1", 
     data: $(this).serialize(), 
     success: function(msg) { 
      console.log("LOGIN"); 
      window.location.reload(); 
     } 
     })    
    } else { 
     console.log('not connected'); 
     window.location.reload(); 
    } 
    } catch(err) { 
    window.location.reload(); 
    } 
}); 
}; 

/** 
* Make sure that the FB is initialized! 
*/ 
function fbEnsureInit(callback) { 
    if (!window.fbApiInitialized) { 
    setTimeout(function() { fbEnsureInit(callback); }, 50); 
    } else { 
    if (callback) { callback(); } 
    } 
} 

/** 
* Load the JS SDK directly from Facebook 
*/ 
(function() { 
    var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
     '//connect.facebook.net/de_DE/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 

</script> 

的SDK被加載。我能看到FB-按鈕,當我點擊它的代碼工作,直到

console.log('FB.login'); 

的FB-彈出彈出並沒有任何反應......這應該是這種地步:

FB.Event.subscribe('auth.login', function(response) { 

應被叫...但它不..任何人都可以幫助我解決這個問題嗎?

謝謝。

編輯:

我只注意到這只是發生,當我已經登錄到Facebook上。如果我沒有登錄,登錄彈出窗口會彈出兩次(!),我可以登錄Facebook並調用函數FB.Event.Subscribe。

那麼如何才能看到用戶是否登錄到Facebook並連接到我的應用程序?

爲什麼Popup調用兩次?

+0

刪除腳本底部的JS SDK的直接加載功能。 –

+0

如果我這樣做,FB按鈕的圖像不會加載。我只有一個不可點擊的文字:「與Facebook連接」。 – MrTouch

+0

我的錯誤。以爲你加載SDK兩次。 –

回答

2

如果您想檢查用戶是否連接到您的應用程序,則需要使用FB.getLoginStatus

登錄彈出窗口被觸發兩次,因爲FB按鈕也具有登錄功能。刪除您的阿賈克斯呼叫$(".fb-login-button").live並修改您的登錄按鈕,如下所示:

<div class="fb-login-button" scope="email" data-show-faces="true" data-width="200" data-max-rows="1"></div> 
+0

您的意思是:「將ajax調用移除到$(」.fb-login-button「)。 「?除此之外,我的Facebook按鈕完全是這樣的,除了在div之間使用Facebook進行登錄之外。 – MrTouch

+1

在這個函數中,你也調用了由登錄按鈕啓動的'FB.login'。這就是你得到兩個彈出窗口的原因。 –

+0

我明白你的觀點,但我不知道該怎麼做。我如何刪除FB.Login,但保留我的功能呢? – MrTouch