我试图在页面内容加载之前延迟加载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),这是有效的,而在某些情况中则不然。
我在想,对于我正在努力实现的目标,是否有更好的解决方案,或者我是否真的忽略了什么。
您应该将您的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]);
}
});
};