异步加载Facebook Javascript SDK
问题描述:
我试图异步加载all.js文件。异步加载Facebook Javascript SDK
在我的ASCX文件:
<div id="fb-root"></div>
我有一个用户控件与包括JavaScript文件中:
window.fbAsyncInit = function() {
FB.init({
appId: 'XXXXXXXXXXXXX',
status: true,
cookie: true,
xfbml: true,
oauth: true
});
};
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
然而,当页面呈现和负载,FB不存在。
什么给?
答
这意味着FB
在被初始化之前被调用。由于它是初始化异步,所以在你第一次使用FB
之前,我建议你在你的视图中编写代码FB.init
而不是包含它。像这样使用 -
window.fbAsyncInit = function() {
FB.init({
appId: 'XXXXXXXXXXXXX',
status: true,
cookie: true,
xfbml: true,
oauth: true
});
// use FB here ..
};
答
Sahil的回答是正确的。在呈现文档时,不能保证已经加载了任何异步脚本。
如果从fbAsyncInit
回调中运行你的代码是不是你想要的,你可以考虑两种可供选择的方法是什么:
选项1
加载SDK synchronousy:
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
通过这样做,即使在文档开始呈现之前,FB
也将存在。
选项2
检查的SDK已经被加载并在不提供备用解决方案。
if (window.FB) {
// use FB here ..
} else {
// still loading, tell user to wait one more second
}