在页面内容完成加载后加载Facebook Like Box

时间:2012-02-17 13:00:31

标签: jquery ajax facebook timeout facebook-likebox

我正在尝试在加载页面内容之前延迟加载Facebook Like Box。我试图通过AJAX实现这一点,但到目前为止已经有了混合的结果。我所做的是采取以下代码(HTML5版本):

<div id="fb-root"></div>
<script>(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/all.js#xfbml=1&appId=147395032005356";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<div class="fb-like-box" data-href="http://www.facebook.com/platform" data-width="292"   data-show-faces="true" data-stream="false" data-header="false"></div>

......让它在我网站的某个地方独立。

然后我设置了一些jQuery来获取代码并将其附加到页面上,如下所示:

// set 1 second timeout
setTimeout(function () {
    $.ajax({
        url: "/facebook/likebox.php",
        success: function(data){

            // add loaded data to page
            $('#foo').append(data);
        }
    });
}, 1000);

在某些情况下(在同一页面上点击F5)这有效,有些则没有。

我想知道是否有更好的解决方案来解决我想要完成的事情,或者我是否真的忽略了某些事情。

1 个答案:

答案 0 :(得分:1)

你应该把你的javascript放到fbAsyncInit()回调函数中,这样你就可以放心,Facebook JavaScript SDK已经完全加载了。在为类似框插入DOM之后,别忘了给FB.XFBML.parse()打电话

window.fbAsyncInit = function() {
 $.ajax({
    url: "/facebook/likebox.php",
    success: function(data){

        // add loaded data to page
        $('#foo').append(data);
        FB.XFBML.parse($('#foo')[0]);
    }
 });
};