Javascript 加载页面时阻止FB.login弹出窗口

Javascript 加载页面时阻止FB.login弹出窗口,javascript,facebook,facebook-graph-api,popup,Javascript,Facebook,Facebook Graph Api,Popup,我在调用FB.login时遇到问题当页面加载时,浏览器会阻止FB.login弹出窗口。目前我知道我必须在用户点击事件后调用FB.login,但由于客户端的业务逻辑,我必须这样做 FB.api('/me/permissions', function(response2) { var permsArray = response2.data[0]; var permsNeeded = ["user_events"]; var permsToPrompt = [];

我在调用FB.login时遇到问题当页面加载时,浏览器会阻止FB.login弹出窗口。目前我知道我必须在用户点击事件后调用FB.login,但由于客户端的业务逻辑,我必须这样做

FB.api('/me/permissions', function(response2) {
    var permsArray = response2.data[0];
    var permsNeeded = ["user_events"]; 

    var permsToPrompt = [];
    for (var i in permsNeeded) {
       if (permsArray[permsNeeded[i]] == null) { 
        permsToPrompt.push(permsNeeded[i]);
      }
    }   

    if (permsToPrompt.length > 0) {
      promptForPerms(permsToPrompt);
    }
});



var promptForPerms = function(perms) {
    FB.login(function(response) {
    }, {scope: perms.join(',')});
};

有没有办法在没有用户单击事件的情况下调用FB.login()?或者有什么调整吗?感谢您的帮助。

不幸的是,您将无法通过编码绕过弹出窗口阻止程序

解决这一问题的方法是,当页面加载时,将用户重定向到Facebook权限对话框,如文档中所述

您首先需要检测用户是否已通过身份验证/连接到您的应用程序,并且仅在未连接时重定向。这最好在
窗口中完成。fbAsyncint
函数如下:

window.fbAsyncInit = function() {

    var myAppID = 'YOUR APPLICATION ID';

    FB.init({ appId: myAppID });

    FB.getLoginStatus(function(response) {
        if ('connected' != response.status) {
            window.location.href = 'https://www.facebook.com/dialog/oauth' +
                '?client_id=' + myAppID +
                '&scope=user_events' +
                '&redirect_uri=' + encodeURIComponent(document.URL);
        } else {
            alert('welcome to my app');
        }
    });

};

另一个选择是稍微调整用户行程;如果用户未连接,您可能会显示一个覆盖图,其中显示一条消息,要求他们进行身份验证,并显示一个按钮,单击该按钮可调用FB.login。

不,您不能绕过我的弹出窗口阻止程序,因为这意味着它将毫无用处。