ДЕНЬ!Та же самая проблема проблемы (ну, не та же проблема, но та же желаемая функциональность) очень беспокоила меня, но, наконец, после ЧАСОВ по различным источникам я нашел решение !!
1st
var data = FB.api(
это неправильно!Поскольку все запросы fb выполняются асинхронно, и единственный способ получить значения данных находится внутри этого запроса после его выполнения.ex
FB.api(
{
method: 'fql.query',
query: 'SELECT create_event FROM permissions WHERE uid=' + response.session.uid
},function(response){
This function will run after the request is finished and ONLY inside here you can read the results data
ex alert(response.data);
});
}
});
2nd Ваше всплывающее окно запроса на разрешение заблокировано chrome по соображениям безопасности (firefox позволяет другим браузерам запрашивать разрешение или нет)
"Можно разрешить только одно всплывающее окноесли она открыта из события пользовательского действия, такого как .onclick "Таким образом, вы можете прикрепить функцию к событию .onclick, которое будет разрешено.
3-е Мое решение для проверки, имеет ли пользователь необходимые разрешения для использования вашегоПриложение:
FB.getLoginStatus(function(response) {
if (response.status.toString().indexOf("connected")>-1) {
initAll();
} else {
requestPermisions proceedure
}
Эта функция проверяет, подключен ли пользователь и предоставил ли он разрешения вашему приложению другим способом. response.status = "unknown" возвращается.
Сейчас ....
Проблема с блокировкой всплывающих окон имеет два решения.
1-е решение = присоединить функцию FB.login () к событию onclick кнопки. Пример.
ifUserNotgrandedPermisions{document.getElementByid("aLogInButton").onclick = function(){
FB.login(....blah blah blah);
};
2-е решение, которое я реализовал, - это перенаправление iFrame на страницу разрешения запроса, а не всплывающее окно
Ниже приведено полное решение, которое проверяет, вошел ли пользователь в систему и получил ли он разрешения ...если нет, то просит пользователяВойдите в систему, а затем запросите разрешения (если вы вошли в систему, просто спросите perms) (если она есть, просто войдите в систему)
FB.init({appId: 'YourAPPID', status: true, cookie: true, xfbml: true, oauth : true});
FB.getLoginStatus(function(response) {
if (response.status.toString().indexOf("connected")>-1) {
initAll(); //User is connected and granted perms Good to go!
} else {
// top.location изменяет URL браузера, а НЕ URL iframe
// Этот URL-адрес специально сформирован для запроса разрешения для вашего приложения.Вы изменяете разрешения и свой appID
// redirect_uri = Измените это на страницу холста вашего приложения
top.location=window.location="http://www.facebook.com/dialog/oauth/?scope=read_stream,publish_stream,friends_photos,friends_activities&client_id="yourAPPID(nobrackets)"&redirect_uri=http://apps.facebook.com/filtered_feed/&response_type=code";}});};