Jquery提供了一种非常方便的方法来延迟执行代码,直到DOM完全加载为止:
$(function() {
dom_is_loaded();
});
Facebook Javascript SDK在异步加载时提供了类似的机制:
window.fbAsyncInit = function() {
fb_is_loaded();
}
在DOM 和 Facebook的SDK完全初始化之前,延迟代码运行的最优雅方法是什么?
答案 0 :(得分:5)
有没有理由只做
window.fbAsyncInit = function() {
$(function() {
both_loaded();
});
}
不起作用?
答案 1 :(得分:3)
为什么不:
var jq_ready = false, fb_ready = false;
function bothReady(){
...
}
$(function() {
dom_is_loaded();
jq_ready = true;
if(fb_ready){
bothReady();
}
});
window.fbAsyncInit = function() {
fb_is_loaded();
fb_ready = true;
if(jq_ready){
bothReady();
}
}
我认为这比设置间隔更清晰,并且会先处理任何事件。
答案 2 :(得分:1)
可能在fbAsyncInit
函数中设置一个标志,并在jQuery加载中检查它:
$(handleLoad);
function handleLoad() {
if (!facebookLoaded) {
setTimeout(handleLoad, 10); // Or 100 or whatever
}
else {
// You're good to go
bothLoaded();
}
}
我预计已经有一些全局可以检查Facebook是否已加载(我没有使用Facebook API)。如果没有,您可以使用自己的旗帜(理想情况下不是全局旗帜):
(function() {
var fbLoaded = false;
window.fbAsyncInit = function() {
fbLoaded = true;
};
jQuery(handleLoad);
function handleLoad() {
if (!facebookLoaded) {
setTimeout(handleLoad, 10); // Or 100 or whatever
}
else {
// You're good to go
bothLoaded();
}
}
})();
答案 3 :(得分:1)