2011-12-17 2 views
1

Здравствуйте, я использую эту функцию для входа в систему с помощью facebook. Теперь браузер запрещает открывать всплывающее окно и запрашивает разрешение. Как его решить? Я не знаю, что проблема заключается в том, что браузер воспринимает это как событие без пользователя.Веб-браузер предотвращает всплывающее окно facebook popup

function chk_login() 
{ 
    window.fbAsyncInit = function() { 
    FB.init({appId: my_app_id, status: true, cookie: true, xfbml: true,oauth : true}); 
    FB.getLoginStatus(function(response) { 
     if (response.authResponse) { 
      var fb_access_token = response.authResponse.accessToken; 
      FB.api('/me', function(response) { 
        console.log(response); 
       }); 
     } 
     else 
     { 
     } 
    }); 
    FB.login(function(response) { 
     if (response.authResponse) { 
      var fb_access_token = response.authResponse.accessToken; 
      FB.api('/me', function(response) { 
       console.log(response); 
       }); 
     } 
    },{scope: fb_scope}); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
    } 


<img src="fb_login.jpeg" onclick="chk_login()" alt="Facebook Login" style="cursor:pointer;"/> 

ответ

2

Не обернуть весь SDK в вашей функции, а иметь свой SDK инициализации в верхней части страницы (после тега <body>) и поставить метод FB.login() в функции входа. что-то вроде:

<body> 
<script> 
var isLoaded = false; 
window.fbAsyncInit = function() { 
    FB.init({appId: my_app_id, status: true, cookie: true, xfbml: true,oauth : true}); 
    isLoaded = true; 
    FB.getLoginStatus(function(response) { 
     if (response.authResponse) { 
      var fb_access_token = response.authResponse.accessToken; 
      FB.api('/me', function(response) { 
       console.log(response); 
      }); 
     } 
    }); 
}; 
// Load the SDK Asynchronously 
(function(d){ 
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
js = d.createElement('script'); js.id = id; js.async = true; 
js.src = "//connect.facebook.net/en_US/all.js"; 
d.getElementsByTagName('head')[0].appendChild(js); 
}(document)); 
function chk_login() { 
    if(!isLoaded) { 
     alert("JS-SDK is not yet loaded or something went wrong. Try again."); 
     return false; 
    } 
    FB.login(function(response) { 
     if (response.authResponse) { 
      var fb_access_token = response.authResponse.accessToken; 
      FB.api('/me', function(response) { 
       console.log(response); 
      }); 
     } 
    },{scope: fb_scope}); 
} 
</script> 

<img src="fb_login.jpeg" onclick="chk_login()" alt="Facebook Login" style="cursor:pointer;"/> 
+0

Но что, если мне не нужно получать информацию о пользователе ('/ me') *** на каждую загрузку страницы? Теперь в вашем коде запрос 'FB.api ('/ me'' выполняется на КАЖДОЙ странице загрузки/перезагрузки. Почему? Мне нужен этот вызов функции ТОЛЬКО, когда пользователь явно нажимает кнопку« Получить данные пользователя ». – Green

Смежные вопросы