gpt4 book ai didi

facebook - 现在 FB.ensureInit() 的替代品是什么?

转载 作者:行者123 更新时间:2023-11-30 05:19:12 24 4
gpt4 key购买 nike

我正在以异步方式加载 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 初始化之前阻止运行封闭代码的方法?

最佳答案

当您加载 Facebook 的脚本时,它将执行 window.fbAsyncInit,您的脚本中已有该脚本。如果您在最后一行包含一个方法调用,则在该方法中您可以确定 FB 已被初始化。

上面的代码变成了

window.fbAsyncInit = function() {
FB.init({appId: 'your app id', status: true, cookie: true,
xfbml: true});
afterInit();
};

您还可以定义自己的 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(); }
}
}

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com