25 Декабрь 2008

Facebook хак — выполнение FBJS по клику на fb:prompt-permission

facebook Как многие знают, работаю я в компании i2we, которая занимается созданием приложений под социальную сеть Facebook. У фэйсбука есть свои теги, которые называются FBML, своя JavaScript библиотека FBJS (причем весь ваш JS-код приводится именно к ней, потому есть определенные ограничения). Есть также так называемые «расширенные права доступа» (extended permissions) — пользователь разрешает приложению совершать те или иные действия (менять его статус, отсылать email и sms). Попросить у него определенные права можно с помощью FBML тега <fb:prompt-permission>, его обязательный параметр — perms, в котором и заключается название «extended permission», например, «email» или «sms». Есть еще необязательный параметр next_fbjs — в нем задается название функции, которая запустится после того, как пользователь в диалоге подтвердит приложению расширенное право доступа. Диалог этот вызывается тегом <fb:prompt-permission>, текст который в нем заключен является ссылкой, при клике на которую и выскакивает диалог с двумя кнопками «Подтвердить» и «Отмена».

Так вот у нас была задача, чтоб засчитывать пользователю определенное действие, даже если он нажал Cancel, а соответствующего события, как next_fbjs нет. Было решено вызывать AJAX запрос при клике на ссылку вызова диалога, но опять таки у этого FBML тега нет события onclick. Решение следующее — поместить внутрь fb:prompt-permission тег <div>, а уже div-у навешать на onclick требуемую JavaScript функцию.

Ниже тестовый пример:

<form>
<input type="text" name="test" id="test" />
</form>

<fb:prompt-permission perms="email"><div onclick="testjs();">Gimme permission</div></fb:prompt-permission>

<script type="text/javascript">
function testjs() {
     document.getElementById('test').setValue('Yes!');
     //AJAX here
     return false;
}
</script>

рубрики: Разработка | 2 комментария