Facebook登录弹出窗口在IE 9中被阻止

Дам*_*чев 1 javascript internet-explorer facebook login facebook-login

我有这个按钮:

<img src="static/img/facebook_button.png" id="login-fb" onclick="login();" />
Run Code Online (Sandbox Code Playgroud)

我也有这个脚本:

window.fbAsyncInit = function(){
    FB.init({
        appId : 'MY_APP_ID',
        status : true,
        cookie : true,
        xfbml : false
    });
};
Run Code Online (Sandbox Code Playgroud)

最后,我有这个功能:

function login()
{
    facebookPerms = [
        'user_photos', 'email', 'offline_access', 'user_relationships', 'read_stream',
        'user_about_me', 'user_birthday', 'user_education_history', //'publish_stream',
        'user_hometown', 'user_interests', 'user_location', 'user_likes',
        'user_religion_politics', 'user_activities', 'user_work_history'
    ];
    //Get the facebook login status
    FB.getLoginStatus(function(response) {
        if (response.session) {
            // logged in and connected user, someone you know
            ajaxLogin();
        } else {
            //Display the facebook login dialog
            FB.login(function(response) {
                if (response.authResponse) {
                    // user is logged in and granted some permissions.
                    // perms is a comma separated list of granted permissions
                    ajaxLogin();
                } else {
                    // user is not logged in, display the error dialog box
                    errorNotLogged();
                }
            }, {
                //Ask for permissions of Facebook
                scope: facebookPerms.join(',')
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我遵循这个Facebook规则:

调用FB.login会导致JS SDK尝试打开弹出窗口.因此,只应在用户单击事件后调用此方法,否则大多数浏览器都会阻止弹出窗口.

而我的网站仍然在IE9中阻止了它的Facebook弹出窗口.任何想法如何解决这个问题?有没有其他人如何做到这一点没有他们的脚本被阻止?

bor*_*kur 6

请尝试以下方法:

  • 获取用户登录状态.
  • 如果用户未登录,请显示登录按钮.
  • 点击后直接调用FB.login函数.

在您的实现中,FB.login不是在用户交互后直接调用,而是作为FB.getLoginStatus的回调函数的一部分.我想这会导致IE阻止弹出窗口.