facebook社交插件加载完成后如何加载函数方法?

时间:2011-09-04 05:42:02

标签: jquery-plugins facebook-social-plugins

我有jQuery masonry来布局我的网站上的列表项,每个列表项都有一个fb:comments。异步加载SDK,甚至将方法设置为“$ container.masonry('reload');”在FB.init()之后,列表项仍然重叠。

我测试了在重新加载砌体之前放置一个警告()框,如果快速关闭警告框,项目仍然重叠,但如果在一段时间后关闭它,它会正确显示边距。因此,我假设砌体重新加载在fb:comments完成加载的内容之前运行。

如果在fb:comments完成加载后,如何触发砌体重装?不是通过按钮单击。图像显示何时重叠并且在fb:comments之后重新加载。

2 个答案:

答案 0 :(得分:3)

如果使用xfbml版本的插件,则可以订阅xfbml.render - 在所有插件(调用)完成时触发。 http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

答案 1 :(得分:1)

根据FB.Event.subscribe,有一个加载事件将在页面完成呈现插件时自动触发

步骤1:在HTML中(将其放在您希望显示社交框的位置):

<div class="fb-page" data-href="https://www.facebook.com/facebook" data-small-header="true" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/facebook"><a href="https://www.facebook.com/facebook">Facebook</a></blockquote></div></div>

步骤2:在页脚中(在结束<body>标记之前):

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function(){
    //FB.init({ status: false, cookie: true, xfbml: true });
    FB.Event.subscribe("xfbml.render", function(){
        SocialBoxesLoaded(); //-->this is what we want (any custom Function) :)
    });
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

function SocialBoxesLoaded(){
    //...Your Custom Code...
}
</script>