Garanta a presença de FB JSDK com o objeto jQuery $ .Deferred

Quando eu desenvolvo Facebook App / Tab, preciso fazer com que a API JS do Facebook chame com bastante frequência. Mas às vezes, posso chamar o método no objeto FB muito cedo, antes que o FB seja completamente carregado. Em vez de definir um cronômetro para fazer todas as chamadas relacionadas ao FB após um certo tempo, o que não é confiável, uso o objeto jQuery $ .Deferred para tornar isso muito mais fácil. Você pode configurar o bloco de inicialização FB desta forma, junto com um objeto $ .Deferred. E uma vez que o objeto FB é carregado, você resolve o objeto adiado para que todos os scripts que dependem do objeto adiado sejam acionados assim que o FB for carregado. $ .Deferred é muito legal!

<script type="text/javascript">
(function(){
var deferred = $.Deferred();
window
.fb_loaded = deferred.promise();

window
.fbAsyncInit = function() {
FB
.init({
appId
: "",
channelUrl
: "/channel.html",
status
: true,
cookie
: true,
xfbml
: true
});

deferred
.resolve();
})();
</script>

Depois de obter essa configuração, em qualquer lugar no HTML com o jQuery carregado, você pode simplesmente fazer algo assim para garantir que o FB seja carregado:

$.when(fb_loaded).then(function(){
FB
.Canvas.setAutoGrow();
});