Как мое приложение может запрашивать разрешения FB при нажатии кнопки «Нравится»? - PullRequest
1 голос
/ 12 июля 2011

У меня есть сайт с интеграцией Facebook.На главной странице есть несколько популярных кнопок «Нравится» и кнопка входа в систему, которой нет.Я хотел бы прикрепить событие к кнопкам «Мне нравится», которое фактически сделает их кнопками входа - то есть, помимо всего, что делает Facebook, я хочу воспользоваться возможностью запросить расширенные разрешения для моего приложения.

Это не работает, и вот что я знаю о том, почему:

  1. Я слушаю клики, используя следующий вызов: FB.Event.subscribe ("edge.create", function (obj) {/ * my callback * /});
  2. Событие edge.create наступает, когда Facebook завершает обработку клика.
  3. Facebook обрабатывает клик асинхронно, откладывая во время выполнения запросацикл-ответа.
  4. Код Javascript, выполненный после этого асинхронного ожидания, не является частью того же стека и не имеет благословений, предоставляемых действием пользователя.
  5. Средства, которые Facebook предоставляет для запроса расширенных разрешенийвключает в себя создание всплывающего окна, и большинство современных браузеров включают блокировщик всплывающих окон, который отклоняет вызов вне стека, инициируемого действием пользователяion.

Эта цепочка приводит к тому, что обработчики, запущенные с помощью edge.create, не могут запрашивать расширенные разрешения.Я могу придумать два класса решений:

  1. Найти способ прослушивать исходный клик, а не после того, как Facebook получает клик, отправляет запрос, получает ответ и, наконец, запускает глобальный обработчик.
  2. Найдите альтернативный пользовательский интерфейс для запроса разрешений, который не включает всплывающее окно

Ничто из того, что я нашел в исследованиях, не показало мне простой способ сделать любой из них.В решении 1 FBJS предоставляет метод addEventListener, но, насколько я могу судить, FBJS не имеет ничего общего с моим делом (интеграция на моем веб-сайте), поэтому я не могу использовать его для отлова клика.Что касается решения 2, в собственной документации Facebook для FB.login говорится следующее:

You should only call this on a user event as it opens a popup. Most browsers block popups, unless they were initiated from a user event, such as a click on a button or a link.

(Источник: https://developers.facebook.com/docs/reference/javascript/FB.login/)

Так что я зашел в тупик, но похоже, чтоужасно искусственная проблема - хочет ли Facebook, чтобы я мог запрашивать разрешения при нажатии кнопки «Нравится», или нет? Если да, то чего мне не хватает? Если нет, почему они реализуют это ограничение на уровне пользовательского интерфейса?

1 Ответ

2 голосов
/ 12 июля 2011

Facebook Like кнопки существуют внутри <iframe>.Таким образом, у вас нет возможности захватить или перехватить событие нажатия кнопки, или даже иметь событие щелчка на самом <iframe>, насколько я могу судить.

Возможно, вы могли бы начать страницуотображая ваши собственные кнопки, которые выглядят как кнопки Facebook Like, и затем вы можете обрабатывать нажатия на них как обычно.Вы можете связать их так, чтобы при первом щелчке они запрашивали разрешения, а затем заменить все ваши пользовательские кнопки «Мне нравится» на настоящие кнопки «Мне нравится».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...