如何延迟javascript函数,直到Jquery& Facebook都装了吗?

时间:2011-04-02 17:44:16

标签: javascript jquery facebook

Jquery提供了一种非常方便的方法来延迟执行代码,直到DOM完全加载为止:

$(function() {
    dom_is_loaded();
});

Facebook Javascript SDK在异步加载时提供了类似的机制:

window.fbAsyncInit = function() {
    fb_is_loaded();
}

在DOM Facebook的SDK完全初始化之前,延迟代码运行的最优雅方法是什么?

4 个答案:

答案 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)