11

以下 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'}
        );
}
4

3 回答 3

7

我试图FB.Login在内部页面加载时自动运行window.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) 上测试。

于 2014-09-24T03:23:10.720 回答
0

这绝对不是阻止弹出窗口的问题。虽然我已经看到直接调用登录时有效的场景,但在 ajax 回调的结果时却没有。

于 2012-06-05T14:58:31.557 回答
0

仔细检查 Facebook 应用设置中的移动网站 URL。

于 2013-04-14T20:44:33.737 回答