1度
当你加载Facebook的脚本时,它将执行
window.fbAsyncInit
,你的剧本里已经有了。如果在最后一行包含方法调用,则在该方法中可以确保FB已初始化。
上面的代码变成
window.fbAsyncInit = function() {
FB.init({appId: 'your app id', status: true, cookie: true,
xfbml: true});
afterInit();
};
2度
您还可以定义自己的fbEnsureInit,它与以前一样工作,并使用信号量而不是方法调用:(最初来自
another answer
.)
window.fbAsyncInit = function() {
FB.init({appId: 'your app id', status: true, cookie: true,
xfbml: true});
fbApiInitialized = true;
};
function fbEnsureInit(callback) {
if (!window.fbApiInitialized) {
setTimeout(function() { fbEnsureInit(callback); }, 50);
} else {
if (callback) { callback(); }
}
}
3度
另一种方式在
Performance tips for Connect
维基。此方法检查脚本的状态,并在加载脚本时执行回调。
因此,在上面的代码中,在附加脚本之前插入以下代码:
script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState || this.readyState == "loaded" ||
this.readyState == "complete") ) {
done = true;
afterInit();
}
};
方法
afterInit
将在加载脚本时调用。