API-интерфейс Facebook очень сложен, а документация очень скудная. Вы правы насчет Javascript ... нормальный Javascript работает только внутри iframe на Facebook, в противном случае вы ограничены подмножеством отфильтрованного Javascript под названием FBJS. Вы можете спокойно игнорировать что-либо о FBJS в документации и сосредоточиться на фреймах.
Загрузка фрейма
Первое, что я хотел бы упомянуть, это то, что тег <fb:iframe>
фактически отображается с кучей вещей в атрибуте src
. Поэтому, если вы добавите такой тег на свою страницу в Facebook: <fb:iframe src="http://example.com/page?x=y">
, то, чем он закончится при загрузке в браузер пользователя, будет выглядеть примерно так:
<iframe src="http://example.com/page?x=y&fb_sig_in_iframe=1&fb_sig_locale=en_US&fb_sig_in_new_facebook=1&fb_sig_time=1246340245.3338&fb_sig_added=1&fb_sig_profile_update_time=1242155811&fb_sig_expires=1246345200&fb_sig_user=000000001&fb_sig_session_key=2.d13uVGvWVL4hVAXELgxkZw__.3600.1246345200-000000001&fb_sig_ss=mZtFjaexyuyQdGnUz1zhYTA__&fb_sig_api_key=46899e6f07cef023b7fda4fg2e21bc58&fb_sig_app_id=22209322289&fb_sig=bbc165ebc699b12345678960fd043033">
Facebook добавляет кучу вещей в src. Параметр, который сообщает вам идентификатор пользователя Facebook, fb_sig_user
(здесь 000000001). Я предполагаю, что ваше приложение настроено как «приложение FBML», так как вы, вероятно, не будете использовать тег <fb:iframe>
в «приложении Iframe». Тем не менее, метод рендеринга в обоих случаях одинаков, и вы получаете кучу дополнительных вещей к вашему документу src
в приложении Iframe.
Это действительно только передает вам идентификатор пользователя Facebook при первой загрузке iframe. Последующие операции внутри iframe не будут иметь доступа к этому идентификатору пользователя, если вы не передадите его явно.
Facebook Connect
Если вы хотите взаимодействовать с Facebook изнутри iframe, вот где появляются библиотеки JavaScript Connect для Facebook Connect. Лучшая инструкция по настройке Facebook Connect, вероятно, , это вики-страница , но она все еще немного мутная. Facebook Connect можно использовать как для абсолютно внешних сайтов, так и для обычного контента внутри iframe. Вы попадаете в последнюю категорию, поэтому, если вы будете следовать инструкциям в этой ссылке и использовать первую строку кода в шаге 2 (для FeatureLoader), у вас должно быть все в порядке.
После того, как вы включили скрипт FeatureLoader.js и назвали его FB.init, вы, как правило, должны работать с FB Connect. С этого момента вы должны иметь возможность взаимодействовать с API . Метод users.getLoggedInUser()
выдаст вам текущий идентификатор пользователя в iframe через Javascript.
Надеюсь, это поможет.