Дисплей Facebook: «страница» не работает с FB.ui и всплывающие окна блокируются браузером - PullRequest
0 голосов
/ 15 октября 2011

Я знаю, что iframes не разрешены Facebook для неавторизованных приложений, но я не могу заставить display: 'page' работать также с FB.ui. Единственный режим отображения, который работает, это всплывающее окно. Блокировщики всплывающих окон блокируют как диалоги входа в систему, так и диалоги FB.ui, даже если они работают на любом другом веб-сайте с именем входа в Facebook. Блокировщик всплывающих окон срабатывает, даже когда пользователь щелкает функции FB.login и FB.ui. Это действительно очень раздражает. Поэтому, пожалуйста, помогите мне.

<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js">
</script>
<script>
function xyz() 
{
FB.init({ 
appId:'113381182103752', cookie:true, 
status:true, xfbml:true, oauth:true     
});
FB.getLoginStatus(function(response) {
if(response.status=="connected")
{
document.getElementById("status").innerHTML="User is connected";
}
else if(response.status=="unknown")
{
FB.login(function(response) {
if(response.authResponse)
{
var token = response.authResponse.accessToken;
document.getElementById("tokendiv").innerHTML=token;
}
});
document.getElementById("status").innerHTML="User is logged out";
}
else if(response.status=="not_authorized")
{
FB.ui({
client_id: '113381182103752',
method: 'oauth',
redirect_uri: 'http://127.0.0.1:8888/test3.php',
response_type: 'token',
display: 'page'
});    
document.getElementById("status").innerHTML="User is connected but app is not authorized";
}
else
{
document.getElementById("status").innerHTML="Error";
}
});
}
</script> 
<div id="tokendiv"></div>
<div id="status"></div> 
<button onclick="xyz()">Click Here</button>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Здесь есть 2 вопроса:

1) display: «popup» является обязательным для метода: «oauth» или FB.login для javascript SDK из-за безопасности (перехвата кликов и фишинга). Я бы предложил использовать FB.login в любом случае для получения разрешений или для аутентификации, потому что это более удобно.

2) ваше всплывающее окно заблокировано браузером, потому что FB.login глубоко вложен в ваш стек вызовов javascript, хотя и инициирован пользователем. Это должно быть инициировано пользователем плюс попытаться изменить ваш код, чтобы FB.login не был вложенным.

0 голосов
/ 15 октября 2011

Попробуйте использовать FB.login вместо FB.getLoginStatus или вместо FB.ui для обработки всплывающего окна.

FB.login(function(response) {
  if (response.authResponse) {
    // user is logged in and has permissions
  }
}, {scope:'email'}); 
...