2012-05-02 58 views
10

以下FB.Login功能在桌面版Chrome,FF和Safari中正常工作。 但在移動Safari(在iPhone 4S上測試)中,它掛起並且不返回到FB.login回調。當我使用Safari並將用戶代理設置爲「Safari iOS 4.3.3 - iPhone」時,我也可以在控制檯中看到這一點。Facebook FB.login在Safari中運行,但不在移動Safari中運行

是否因爲移動Safari阻止彈出窗口? (FB.login觸發一個彈出對話框)。

我該如何解決這個問題?謝謝。

function Login(returnLink) { 
     FB.login(function(response) { 
        if(response.status === 'connected') { 
         console.log('User is now FB logged in.'); 
         // now log them into my site 
         encodedReturnLink = encodeURIComponent(returnLink); 
         window.location = location.protocol + '//' + location.host + "/login?returnUrl=" + encodedReturnLink; 
        } 
        else { 
         console.log('User did not fully authorize after clicking FB login button.'); 
        } 
       }, 
       {scope : 'email, publish_actions, publish_stream'} 
     ); 
} 
+0

你是在用戶交互後(點擊/點擊/提交)還是從一些延遲的代碼中立即調用它? –

+1

遇到同樣的問題。你找到了解決辦法嗎? – Jaffer

回答

0

這絕對不是阻止彈出窗口的問題。儘管我已經看到了直接調用登錄的情況,但沒有發現ajax回調的結果。

+0

好吧,但這確實是阻止彈出窗口的問題,因爲它在調用回調時顯然被阻止,而不是在直接調用時阻止? – gapvision

0

仔細檢查您的Facebook應用程序設置中的移動網站URL。

6

我試圖運行FB.Loginwindow.fbAsyncInit之內的頁面加載時自動運行,並且它在iOS上的Safari中不起作用。事實證明,Safari阻止了FB.Login調用觸發的彈出窗口。桌面上的Safari和Chrome工作正常(允許彈出)。

我發現解決此問題的唯一方法是觸發FB.Login調用以響應用戶交互(例如點擊或單擊)。這爲我工作:

HTML

<a href="#" id="fbLogin">Login with Facebook</a> 

的JavaScript(jQuery的)

$('#fbLogin').click(function(){ 
    FB.login(function(response){ 
     // Do something... 
    }); 
}); 

測試在Safari(iOS版8.0)。

+0

+1提供正確的解決方案。它消除了我的頭痛。非常感謝。 – neeraj

+1

Safari似乎對阻擋彈出窗口非常敏感。如果你延遲(即使等待其他回調的一小部分),它似乎會觸發該塊。 – justrhysism

+0

@wireblue這仍然是在當前版本中觸發登錄的唯一方法嗎? – gapvision

相關問題