У меня есть сайт с интеграцией Facebook.На главной странице есть несколько популярных кнопок «Нравится» и кнопка входа в систему, которой нет.Я хотел бы прикрепить событие к кнопкам «Мне нравится», которое фактически сделает их кнопками входа - то есть, помимо всего, что делает Facebook, я хочу воспользоваться возможностью запросить расширенные разрешения для моего приложения.
Это не работает, и вот что я знаю о том, почему:
- Я слушаю клики, используя следующий вызов: FB.Event.subscribe ("edge.create", function (obj) {/ * my callback * /});
- Событие edge.create наступает, когда Facebook завершает обработку клика.
- Facebook обрабатывает клик асинхронно, откладывая во время выполнения запросацикл-ответа.
- Код Javascript, выполненный после этого асинхронного ожидания, не является частью того же стека и не имеет благословений, предоставляемых действием пользователя.
- Средства, которые Facebook предоставляет для запроса расширенных разрешенийвключает в себя создание всплывающего окна, и большинство современных браузеров включают блокировщик всплывающих окон, который отклоняет вызов вне стека, инициируемого действием пользователяion.
Эта цепочка приводит к тому, что обработчики, запущенные с помощью edge.create, не могут запрашивать расширенные разрешения.Я могу придумать два класса решений:
- Найти способ прослушивать исходный клик, а не после того, как Facebook получает клик, отправляет запрос, получает ответ и, наконец, запускает глобальный обработчик.
- Найдите альтернативный пользовательский интерфейс для запроса разрешений, который не включает всплывающее окно
Ничто из того, что я нашел в исследованиях, не показало мне простой способ сделать любой из них.В решении 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, чтобы я мог запрашивать разрешения при нажатии кнопки «Нравится», или нет? Если да, то чего мне не хватает? Если нет, почему они реализуют это ограничение на уровне пользовательского интерфейса?