我试图将Facebook multi-friend-selector放在Facebox中(不想使用fb:dialog,因为它会弹出一个新窗口)。我遇到的问题可能是由于javascript中的引号引起来的,但我一直在想办法解决问题。
有一个更好的方法吗?
$('#test_button').click(function(){
$.facebox(
"<div id='box'>" +
"<fb:serverfbml width='615'>" +
"<script type='text/fbml'>" +
"<fb:request-form action='http://example.com/'" +
"method='POST'" +
"invite='true'" +
"type='Example'" +
"content=""Echo Content. <fb:req-choice url=""http://example.com/"" label=""Example Label"" />"">" +
"<fb:multi-friend-selector showborder='false'" +
"bypass='cancel'" +
"cols=4" +
"actiontext='Invite Friends To Example'/>" +
"</fb:request-form>" +
"</script>" +
"</fb:serverfbml>" +
"</div>"
);
});
注意:出于这篇文章的目的,我替换了所有example.com的内容。当从Facebox字符串中取出时,多好友选择器代码可以正常工作。
在此先感谢您的帮助。
最佳答案
<fb:serverfbml>
标记必须从一开始就出现在页面上,您不能动态添加它。虽然里面的所有东西都是动态的。
因此,为<fb:serverfbml>
分配一些ID,然后在需要时将fbml加载到其中。
在页面上:
<div id='box'>
<fb:serverfbml width='615' id='invite_box'></fb:serverfbml>
</div>
脚本:
$('#test_button').click(function(){
$("#invite_box").html(
"<script type='text/fbml'>" +
"<fb:request-form action='http://example.com/'" +
"method='POST'" +
"invite='true'" +
"type='Example'" +
"content=""Echo Content. <fb:req-choice url=""http://example.com/"" label=""Example Label"" />"">" +
"<fb:multi-friend-selector showborder='false'" +
"bypass='cancel'" +
"cols=4" +
"actiontext='Invite Friends To Example'/>" +
"</fb:request-form>" +
"</script>"
);
});
更新2
尝试在fb init中禁用自动fbml解析:
FB.init({xfbml: false});
然后在加载后手动解析fbml:
$('#test_button').click(function(){
$("#invite_box").html(...);
FB.XFBML.parse($("#box")[0]);
});
如果这样不起作用,请尝试从fbml中删除
<script type='text/fbml'></script>
包装器(我的代码中没有它,没有它也可以正常工作)。