3

我有以下代码将 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 文档中肯定没有这样说)还是我在这里做错了?

4

4 回答 4

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 是从 parse 方法创建的。

于 2011-07-22T10:48:18.420 回答
0

请注意

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

fb:serverFbml是 FBML 的一部分

于 2012-06-07T07:41:18.870 回答
0

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

于 2011-06-18T12:46:27.533 回答
-2

我可以验证 FB.XFBML.parse() 曾经可以工作。也就是说,您可以根据需要多次调用它,但是 Facebook 最近打破了它。现在你只能调用一次。

于 2011-01-30T21:03:31.803 回答