情况
我打开一个这样的层(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()doenst加载js-part。
(如果我在浏览器中打开userinfo.html,一切正常)
答案 0 :(得分:4)
我认为这应该有效:
$("#dialog").load('userinfo.html #layer', function() {
FB.XFBML.parse(document.getElementById('dialog'));
});
$("#dialog").dialog('open');
请注意,它是在加载回调中调用的,以确保Ajax请求已完成,并且在触发XFBML解析之前已加载数据。
答案 1 :(得分: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">
答案 2 :(得分:1)
如果FBML标记从一开始就不存在于页面上,则不会呈现它们(即通过ajax将fbml标记加载到某个div中)。为了呈现它们,你需要做一些额外的工作。
首先,应将所有js内容移动到主窗口(fb js include,fb init)。 userinfo.html应该只包含fbml和html。应该在FB.init({xfbml : false})
中禁用自动FBML解析(我不记得,它可能适用于自动解析,但我认为我必须将其关闭)。
您需要使用fb:serverFbml
标记标记将动态加载未来fbml的位置:
<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
答案 3 :(得分:0)
如果我稍微解析XFBML,一切正常。没有对话框的回调方法('打开'),有吗?
$("#dialog").load('userinfo.html #layer');
$("#dialog").dialog('open');
setTimeout(function() {FB.XFBML.parse(document.getElementById('#dialog'));} ,4000);