2010-09-10 59 views
1

我正在使用jquery在我的页面中实现各种东西,其中包括显示和隐藏div元素。在facebook上使用jquery JS SDk

现在我也在主页面上有Facebook JS SDK来检查用户是否已经登出Facebook并进行图形API调用。

问题是,有时需要一段时间才能从Facebook来响应,而在这段时间内,用户可以看到jQuery在$ .ready中隐藏的div元素。

任何想法如何更好地?

回答

2

好吧..所以我终于能够解决问题调用jQuery代码。你应该异步加载的FB的Javascript SDK如下图所示

<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> 

有关详细信息,请参阅http://developers.facebook.com/docs/reference/javascript/

一件事我注意到,包含FB对象的所有方法,如FB.api等应在与FB.init相同的闭包中,或者FB对象未定义。

0

我认为图表API调用有一个回调函数,当他们完成。从那里,而不是$。就绪

+0

好的事情是我想在图形api调用之前调用我的jquery代码。问题是图形API调用导致延迟,我希望我的代码尽快执行页面加载。 – shashi 2010-09-12 17:35:04

+0

我明白了。我的错! 1.你如何开始隐藏的有问题的div? 或 2.加载页面后,如何调用图形?所以你要用jquery做什么,然后开始调用图表。 没有一些代码示例或网页,它真的很难提供帮助。 – 2010-09-13 13:59:05

0
+0

不,延迟不是需要的。如果您仔细阅读,我希望在早些时候让FB发生,基本上在FB JS Sdk开始进行API调用之前。如果我延迟,那么用户将在$ .ready()中使用hide()方法看到目前隐藏的元素。我希望我这次更清楚。 – shashi 2010-09-12 17:52:40

1

如果你想有一个更清洁方法,试试这个:

window.fbAsyncInit = function() { 
    FB.init({xfbml: true}); 
}; 

$(function() { 
    $.getScript({url: document.location.protocol + 
    '//connect.facebook.net/en_US/all.js'}); 
} 

插入此代码内联的或者在一个单独的JavaScript文件。

注:

  • 这个例子没有定义APPID饼干状态。你可以将它们添加到fbAsyncInit。
  • 使用JQuery 1.8.2进行测试。
  • 我发现#fb-root div是不必要的。
+2

#fb-root声称被用于特定浏览器的某些跨域情况,与频道文件相同。 – 2012-11-27 15:42:50

相关问题