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

#javascript #facebook #popup #facebook-javascript-sdk #fb.ui

#javascript #Facebook #всплывающее #facebook-javascript-sdk #fb.ui

Вопрос:

Я знаю, что iframes запрещены facebook для несанкционированных приложений, но я также не могу заставить display: ‘page’ работать с FB.ui. Единственный режим отображения, который работает, — это всплывающее окно. Блокировщик всплывающих окон блокирует как вход в систему, так и диалоги FB.ui.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>
  

Ответ №1:

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

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

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

Комментарии:

1. Да, я заменил FB.ui на FB.login, потому что, как вы говорите, это удобнее. Я создал еще немного кода, и все в порядке, кроме проблемы с всплывающими окнами, поэтому я попытаюсь внести изменения в код и сообщить об этом здесь. Спасибо

Ответ №2:

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

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

Комментарии:

1. Не повезло. Он уже блокировал всплывающее окно, сгенерированное FB.login, вложенным в функцию FB.getLoginStatus. Возможно, это из-за того, что блокировщик всплывающих окон внес страницу в черный список на localhost, потому что вчера она не блокировалась. Но как насчет страницы: «отображение», почему это не работает? Может ли кто-нибудь протестировать код на своем компьютере и определить, возникают ли у них те же проблемы?