2012-12-12 35 views
1

我從按鈕點擊事件調用Facebook JS SDK的FB.getLoginStatus。我的問題是,如果status參數設置爲true,則瀏覽器彈出窗口阻止程序會被觸發,從而阻止登錄對話框顯示。但是,當我的狀態爲false時,彈出窗口阻止程序不會被觸發。 我需要的狀態爲true,因爲我的網站需要知道用戶是否登錄Facebook而無需刷新頁面。 False參數值意味着FB僅獲取緩存的登錄狀態,如果用戶在您的網站上仍然退出Facebook時可能會出錯。FB.getLoginStatus觸發瀏覽器彈出窗口阻止程序。我怎樣才能阻止它?

我該如何解決這個問題?

這裏是一些代碼,說明了這個問題

$('.my-button').click(function() { 

      FB.getLoginStatus(function (response) { 

       if (response.status != 'connected') { 

        FB.login(function (r) { 
         if (r.status == 'connected') { 
          alert('logged in'); 
         } 
        }); 
       } 

      }, true); 

     }); 

回答

1

這可能是因爲當你通過forceCheck到getLoginStatus,回調異步調用,這切斷其與「點擊」事件有關。瀏覽器或彈出窗口攔截器無法在調用堆棧中找到用戶啓動的點擊事件,因此它會阻止彈出窗口。我目前正在被同樣的問題困擾。

選項:

1)直接調用FB.login。

缺點:即使是登錄用戶也會彈出難看的彈出窗口。 2)在用getLoginStatus檢測到用戶沒有登錄(或者應用程序未被授權)時,在$('。my-button')附近的某處插入一個單獨的登錄按鈕,可能會顯示一條消息,說明用戶必須點擊登錄按鈕才能與Facebook連接。在第二個按鈕的點擊處理程序中直接調用FB.login()。

缺點:-50〜轉化率

我現在將嘗試2)並報告結果。

+1

在用戶點擊按鈕之前(例如在頁面加載時),可能會調用FB.getLoginStatus,將結果存儲在變量中,並且能夠根據變量狀態直接在Click處理程序中調用FB.login ,不是嗎? – Pierre

相關問題