Отображение Facebook: «страница» не работает с FB.ui, а всплывающие окна блокируются браузером

Я знаю, что Facebook не разрешает iframe для неавторизованных приложений, но я также не могу заставить 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>

person Badarse    schedule 14.10.2011    source источник


Ответы (2)


Здесь есть 2 проблемы:

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

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

person Anatoly Lubarsky    schedule 15.10.2011
comment
Да, я заменил FB.ui на FB.login, потому что, как вы говорите, это удобнее. Я создал еще немного кода, и все в порядке, кроме проблемы с всплывающими окнами, поэтому я попытаюсь исправить код и сообщить здесь. Спасибо - person Badarse; 15.10.2011

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

FB.login(function(response) {
  if (response.authResponse) {
    // user is logged in and has permissions
  }
}, {scope:'email'}); 
person bkaid    schedule 15.10.2011
comment
Не повезло. Он уже блокировал всплывающее окно, сгенерированное FB.login, вложенным в функцию FB.getLoginStatus. Возможно, блокировщик всплывающих окон занес страницу в черный список на локальном хосте, потому что вчера она не блокировалась. Но как насчет страницы: «отображение», почему это не работает? Может ли кто-нибудь протестировать код на своей машине и сказать, возникают ли у них те же проблемы? - person Badarse; 15.10.2011