2010-08-28 1 views
0

У меня есть приложение iframe Facebook (с использованием нового API JavaScript для JavaScript), который должен позволить пользователю приглашать своих друзей в приложение после входа в конкурс. У меня есть следующий код в DIV на странице (название приложения и Canvas Url отредактированный):Facebook Multi Friend Selector Not Render (приложение iFrame)

<fb:serverFbml> 
    <fb:request-form 
     method="POST" 
     invite="true" 
     type="{Name of My Application}" 
     content='Your text goes here. %3Cfb%3Areq-choice%20url%3D%{a url-encoded link to my Canvas URL}"/>' 
     label="Authorize My Application"> 
     <fb:multi-friend-selector showborder="false" actiontext="Invite your friends to use My Application."> 
     </fb:multi-friend-selector> 
    </fb:request-form> 
</fb:serverFbml> 

Из того, что я понимаю, если вам нужно использовать FBML теги в приложении XFBML/Iframe, вы просто поместите их в элемент fb: serverFbml, и Facebook позаботится об этом. Конечно, мои первые впечатления кажутся ложными. Вместо того, чтобы бросать в форму, я просто получаю пустой белый ящик, с fbml, казалось бы, нетронутым.

Дизайн этого приложения предполагает (возможно, неправильно), что мне не нужно аутентифицировать пользователя, чтобы они приглашали своих друзей. Есть ли способ сделать это, или мне нужно, чтобы они сначала регистрировались? Документация Facebook (конечно) расплывчата по этому поводу.

EDIT: Мой FB.init() в соответствии с просьбой:

$("body").prepend("<div id=\"fb-root\"></div>"); 
FB.init({ 
    apiKey: "{My apiKey is here}", 
    appId: "{My appId is here}", 
    status: true, 
    cookie: true, 
    xfbml: true 
}); 
+0

Может вы показать свой метод js api init? – serg

+0

Добавил свой вопрос FB.init() к вам. – Dusda

+0

Форма приглашения динамически добавляется на страницу после начальной загрузки или она есть с самого начала? – serg

ответ

2

Хорошо, я получил его на работу. Вот как это выглядит для меня:

<fb:serverfbml> 
    <script type="text/fbml"> 
     <fb:fbml> 
      <fb:request-form action='my_url' method='POST' 
      invite='true' 
      type='Poll' 
      content='This is an invitation! <fb:req-choice url="my_url" label="Accept and join" /> '> 
      <fb:multi-friend-selector showborder='false' actiontext='Select friends to send the poll' cols='5' rows='3' bypass='cancel' max="8"> 
      </fb:request-form> 
     </fb:fbml> 
    </script> 
</fb:serverfbml> 

и код инъекции JS выглядит следующим образом:

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'YOUR APP ID HERE', 
     status: true, 
     cookie: true, 
     xfbml: true 
    }); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 

Так,

1) Вам не нужно ваше приложение KEY, только ваш идентификатор приложения в коде JS.

2) XFBML необходимо обернуть внутри тега SCRIPT.

1

Этот пример тоже работает:

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=APP_ID&amp;xfbml=1"></script><fb:serverfbml> 
    <script type="text/fbml"> 
    <fb:fbml> 
     <fb:request-form action='my_url' method='POST' 
     invite='true' 
     type='Poll' 
     content='This is an invitation! <fb:req-choice url="my_url" label="Accept and join" /> '> 
     <fb:multi-friend-selector showborder='false' actiontext='Select friends to  send the poll' cols='5' rows='3' bypass='cancel' max="8"> 
      </fb:request-form> 
     </fb:fbml> 
    </script> 
</fb:serverfbml> 

Set APP_ID в http://connect.facebook.net/en_US/all.js#appId=[APP_ID] & XFBML = 1