2012-08-01 99 views
3

對於我們使用Facebook Javascript SDK的移動Web應用程序,我們希望檢查用戶的登錄狀態,並在必要時顯示Facebook登錄對話框。下面的代碼是在我們的網絡應用程序中單擊處理程序中運行,給定按鈕:FB.login()彈出窗口僅在移動Web應用程序中被阻止

$('#button').click(function() { 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      // do something with the logged in and authorized user 
     } else if (response.status === 'not authorized') { 
      // logged in but has not authorized our app 
     } else { 
      // not logged in 
      FB.login(); 
     } 
    }); 
}); 

確保用戶沒有登錄到Facebook上,這工作得很好,並顯示登錄對話框的桌面Web瀏覽器時,該按鈕被按下,但不是移動網頁(至少在各種瀏覽器上不適用於Android,我目前無法使用iPhone)。移動網絡應用程序上沒有任何內容,當我禁用彈出窗口阻止程序時,則會收到提示,詢問是否允許此彈出窗口,該窗口有效。

有誰知道爲什麼行爲不同和/或已知/標準解決方法是什麼?謝謝!

回答

7

您的代碼將而不是可以在所有桌面瀏覽器中工作。一些瀏覽器(移動和桌面)阻止彈出窗口,除非它們是由用戶點擊發起的。例如,

$('#mybutton').click(function() { 
    FB.login(); 
}); 

會工作,因爲FB.login()功能只有被稱爲響應用戶的點擊。因此,要修復您的代碼,請使用顯示「登錄」按鈕的一些代碼和鼓勵用戶單擊該按鈕的文本替換FB.login()調用。

+0

嗨吉爾,感謝您的回覆。我正在更新代碼,因爲我忘記指定代碼被調用以響應用戶的點擊。如果用戶點擊觸發了一個AJAX調用(FB.getLoginStatus),它的響應觸發了實際的彈出窗口(FB.login),這將如何影響彈出窗口阻止? – aarontam 2012-08-01 20:04:52

+0

我說的仍然適用。由於您從*回調*函數調用'FB.login()',瀏覽器認爲這與用戶的*單擊*操作是分開的。 – 2012-08-01 20:06:32

+0

Gotcha。我們正試圖避免讓用戶點擊另一個按鈕,所以我會探索改善這種流程的另一種方式。 – aarontam 2012-08-01 20:09:31

相關問題