2010-07-19 32 views
2

好吧,我在這裏試圖將一個網站與facebook連接起來,並且我陷入了一些奇怪的地獄之環。如何將Facebook上所有的JS功能全部加載到Connect網站上

我已經看到了在fbc網站上初始化js的兩種方法,我已經重複嘗試過兩次,但它們只做了我需要完成的整個工作的兩半。

<script src="http://connect.facebook.net/en_US/all.js"></script> 
... 
$(document).ready(function(){ 
    FB.init({'appId':'000', 
     'cookie':true, 
     'status':true, 
    }); 
}); 

這是官方文檔說的要做的,但是這並不能加載所有的功能。 FB.Connect沒有定義,ensureInit沒有做任何事情,我搞砸了。 我所看到的其他代碼是

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script> 
... 
$(document).ready(function(){ 
    FB.init("000", "/xd_receiver.htm"); 
}); 

這起初似乎是巨大的,因爲它加載FB.Connect功能...但似乎這是它作爲加載功能FB唯一集。 ui未定義,FB.getLoginStatus未定義,所有其他「核心函數」未定義...

試圖包含不同的js文件導致奇怪的錯誤和半初始化的會話,我不知道什麼是2種不同類型的FB.init調用之間的區別是...

謝謝!

回答

1

你的第一個例子描述了在最近推出的新API(幾個月前)中做事情的「新方式」,而第二個例子是過去的舊API(現在已棄用)。

現在裝載FB JS的最好的辦法是:

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

直到JS被加載,不會阻止頁面加載。

不幸的是,沒有辦法從兩個世界中獲得最佳效果,並且如果可能的話,您應該開始爲新項目使用新API,因爲對舊項目的支持遲早會被丟棄。

您可以找到新的API文檔here。來自舊API的90%的功能被轉移(通常使用不同的名稱),但一些舊的功能如FB.ensureInit()實際上缺失。還有一些舊的API功能現在需要使用FQL

+0

非常感謝您的回覆,我現在已經開始行動了,恢復了生產力! – Paco 2010-07-19 19:31:11

0

原來我很困惑,這兩個文件和函數調用適用於js庫的兩個不同版本...所以當我使用新版本時,我不應該指望FB.Connect被定義,當我使用舊版本,我不應該指望FB.ui被定義...

我本來可以保存一天的時間,如果文檔更清晰,並且有更少的鏈接腐爛。

乾杯!

1

第一個例子是使用新的JS SDK,這絕對是你想要使用的。 FeatureLoader URL會爲您提供較舊的SDK。他們不能在你發現的同時加載,所以只需使用新的最新和最好的。

相關問題