Facebook FB.login适用于Safari,但不适用于移动Safari

JMa*_*Man 10 javascript facebook mobile-safari facebook-javascript-sdk

以下FB.Login功能在桌面Chrome,FF和Safari中正常工作.但是在移动版Safari中(在iPhone 4S上测试过),它会挂起并且不会返回到FB.login回调.当我使用Safari并将用户代理设置为"Safari iOS 4.3.3 - iPhone"时,我也可以在控制台中看到这一点.

是因为移动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'}
        );
}
Run Code Online (Sandbox Code Playgroud)

Wir*_*lue 6

我试图FB.Login在内部页面加载时自动运行,window.fbAsyncInit并且它在iOS上的Safari中无效.事实证明Safari阻止了FB.Login调用触发的弹出窗口.桌面上的Safari和Chrome工作正常(允许弹出窗口).

我发现解决这个问题的唯一方法是触发FB.Login调用以响应用户交互(例如Tap或Click).这对我有用:

HTML

<a href="#" id="fbLogin">Login with Facebook</a>
Run Code Online (Sandbox Code Playgroud)

JavaScript(jQuery)

$('#fbLogin').click(function(){
    FB.login(function(response){
        // Do something...
    });
});
Run Code Online (Sandbox Code Playgroud)

在Safari(iOS 8.0)上测试.


Kam*_*ran 0

这绝对不是阻止弹出窗口的问题。虽然我见过这样的场景,其中登录在直接调用时有效,但在 ajax 回调结果时则无效。