每页可以调用FBML.XFBML.parse()的次数是否有限制?

时间:2010-09-21 18:23:16

标签: jquery facebook facebook-javascript-sdk

我有以下代码将XFBML片段动态加载到Facebook IFRAME应用程序中。

HTML:

<div id="fragment" style="display:none">
<fb:serverfbml id="fragmentfbml">
</fb:serverfbml>

jQuery代码:

<script type="text/javascript">
function loadFragment()
{
    jQuery.ajax(
    { 
        url: "xfbml_fragment.php", // contains the 
        type: "POST",
        dataType: "html",
        cache: "false",
        success: function (data)
        {
            jQuery("#fragmentfbml").html(data);
            FB.XFBML.parse();
            jQuery("#fragment").css("display","block");
        }
    });
}
</script>

jQuery AJAX调用每次都有效,但FB.XFBML.parse()调用只能运行一次。我已经使用console.log()(见下文)向FB.XFBML.parse()添加了一个回调,并验证它只在第一次调用时执行。

FB.XFBML.parse(
   document.getElementbyId("fragment"),
   function( { console.log("parse called"); } )
);

这是FB.XFBML.parse()的已知行为(当然在FB Javascript SDK docs中没有这么说)或者我在这里做错了吗?

4 个答案:

答案 0 :(得分:2)

我尝试了以下功能,并且能够多次调用FB.XFBML.parse():

function createFbmlNode() {
   var like = document.createElement("fb:like");
   like.setAttribute('href', 'URL_TO_LIKE');
   like.setAttribute('send', false);
   like.setAttribute('width', 450);
   like.setAttribute('show_faces', false);

   document.getElementById('response').appendChild(like);

   FB.XFBML.parse(); 
}

在以下范围内创建节点:

<span id="response" style="display: block;"></span>

类似按钮iFrame是从解析方法创建的。

答案 1 :(得分:0)

作为一种解决方法,我们可以在调用parse函数之前尝试删除并重新插入connect js。每次插入JS文件时,解析函数都会运行一次。

答案 2 :(得分:0)

请注意

  

FBML已被弃用。从2012年6月1日开始FBML应用程序将不会   更长的工作,因为所有FBML端点都将被删除。

fb:serverFbml是FBML的一部分

答案 3 :(得分:-2)

我可以验证FB.XFBML.parse()曾经工作过。 即你可以根据需要多次调用它 然而Facebook最近打破了它。现在你只能 叫它一次。