1

状況

こんな感じでレイヤー(jQueryUI)を開きます。

$("#dialog").load('userinfo.html #layer').dialog('open');

userinfo.htmlは、Facebook ユーザーの写真と名前を表示します。

  <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <...some code...>
    <div id="layer">
      <script type="text/javascript">
        $(function() {   
        FB.init("2342342423424", "http://www.mysite.com/xd_receiver.htm");  
        });
      </script>  
      <fb:profile-pic uid="200000999530485" size="square" linked="true"></fb:profile-pic> <fb:name uid="200000999530485"></fb:name>
     </div>
   <...some code...>
</html>

問題:

レイヤーは開きますが、fbml タグがレンダリングされません! 助けてください。load() は js 部分をロードしないと思います。

(ブラウザでuserinfo.htmlを開くと、すべてが機能します)

4

4 に答える 4

4

私はこれがうまくいくと思います:

$("#dialog").load('userinfo.html #layer', function() {
  FB.XFBML.parse(document.getElementById('dialog'));
});
$("#dialog").dialog('open');

Ajax リクエストが完了し、XFBML 解析がトリガーされる前にデータがロードされていることを確認するために、load コールバックで呼び出されていることに注意してください。

于 2010-07-11T23:55:18.313 に答える
1

FBML タグが最初からページに存在しない場合 (つまり、ajax を介して div に fbml タグをロードした場合)、FBML タグはレンダリングされません。それらをレンダリングするには、追加の作業を行う必要があります。

まず、すべての js をメイン ウィンドウに移動する必要があります (fb js インクルード、fb init)。userinfo.html には、fbml と html のみを含める必要があります。で自動 FBML 解析を無効にする必要がありますFB.init({xfbml : false})(覚えていませんが、自動解析をオンにしても機能する可能性がありますが、オフにする必要があったと思います)。

将来の fbml が動的にロードされる場所を次のfb:serverFbmlタグでマークする必要があります。

<div id="dialog">
    <fb:serverFbml id="dialog-fbml"></fb:serverFbml>
</div>

fbml ロード スクリプトは次のようになります。

$("#dialog-fbml").load('userinfo.html #layer'); //load fbml
FB.XFBML.parse($("#dialog")[0]); //parse it
$("#dialog").dialog('open'); //show
于 2010-07-11T19:18:28.423 に答える
1

私が知っている限りでは、facebook には次の名前空間が必要です。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

それを指定していることを確認するか、後の div の代わりに ID を指定してみてください。

<html id="layer" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
于 2010-07-11T18:24:58.200 に答える
0

XFBMLを少し遅れて解析すると、すべてが正常に機能します。dialog('open')のコールバックメソッドはありませんか?

      $("#dialog").load('userinfo.html #layer');
      $("#dialog").dialog('open');        
      setTimeout(function() {FB.XFBML.parse(document.getElementById('#dialog'));} ,4000);
于 2010-07-11T20:03:59.280 に答える