作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在以异步方式加载 FB API:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'your app id', status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
我怎么知道它什么时候初始化? FB.ensureInit()
的替代品是什么在 API 初始化之前阻止运行封闭代码的方法?
最佳答案
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
方法将在加载脚本时调用。
关于facebook - 现在 FB.ensureInit() 的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977432/
我正在以异步方式加载 FB API: window.fbAsyncInit = function() { FB.init({appId: 'your app id', status:
我是一名优秀的程序员,十分优秀!