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() 呼び出しは 1 回しか機能しません。console.log() を使用して FB.XFBML.parse() へのコールバックを追加し (以下を参照)、最初に呼び出されたときにのみ実行されることを確認しました。

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

これは FB.XFBML.parse() の既知の動作ですか (確かにFB Javascript SDK docsでそうは言っていません)、それともここで間違ったことをしているだけですか?

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

回避策として、解析関数を呼び出す前に接続 js を削除して再挿入することを試みることができます。解析機能は、JS ファイルを挿入するたびに 1 回動作します。

于 2011-06-18T12:46:27.533 に答える
0

ご注意ください

FBML は廃止されました。2012 年 6 月 1 日以降、すべての FBML エンドポイントが削除されるため、FBML アプリは機能しなくなります。

fb:serverFbmlは FBML の一部です

于 2012-06-07T07:41:18.870 に答える
-2

FB.XFBML.parse() が機能していたことを確認できます。つまり、好きなだけ何度でも呼び出すことができますが、Facebook は最近それを破りました。これで、一度だけ呼び出すことができます。

于 2011-01-30T21:03:31.803 に答える