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 解析之前已加载数据。

于 2010-07-11T23:55:18.313 回答
1

据我所知,facebook 需要这个命名空间:

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

确保您指定或尝试将 id 提供给它而不是后面的 div:

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

如果 FBML 标签从一开始就没有出现在页面上,则不会呈现它们(即,您通过 ajax 将 fbml 标签加载到某些 div 中)。为了渲染它们,您需要做一些额外的工作。

首先,所有 js 的东西都应该移动到你的主窗口(fb js include,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 回答
0

如果我延迟解析 XFBML,一切正常。对话框('open')没有回调方法吗?

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