我试图将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>包装器(我的代码中没有它,没有它也可以正常工作)。

09-15 12:52