2012-02-09 60 views
3

在我的網站中,我使用的是Facebook JS SDK的異步加載。要實際設置它,我使用window.fbAsyncInit函數中的標準FB.init。多個fbAsyncInit的?

但問題是,在我的網站這個功能是在每一個頁面上。然而,當我在子頁面中時,由於我的網站設計,我不能直接添加到JS功能中,所以我必須複製並粘貼整個函數並添加我的位。

我不認爲多個fbAsyncInit是可能的,那麼最好的方式來實現呢?

+0

你怎麼看「子頁面」? – DMCS 2012-02-09 22:52:09

回答

5

你可以用這個來代替檢查您是否已經有了一個fbAsyncInit在那種情況下toghether IT連鎖:

var oldCB = window.fbAsyncInit; 
window.fbAsyncInit = function(){ 
    if(typeof oldCB === 'function'){ 
     oldCB(); 
    } 
    //Do Something else here 
}; 
+0

糟糕,我忘了這個問題。經過更多的搜索後,我確實找到了「擴展」功能的方式。希望這會幫助別人。謝謝! – TheLQ 2012-03-01 18:40:46

+0

你知道這是否是這樣做的「官方」方式嗎?或者,如果Facebook建議另一種方法/有解決方案呢?看起來像一個很常見的事情要做,除非你想把你的JS代碼放在一個地方。 – powerbuoy 2012-03-29 14:39:38

+0

@powerbuoy我不知道是否有與此不同的「官方」方式。但這不是黑客行爲。這是一個相當常見的JavaScript設計模式。 – Eduardo 2012-03-30 04:49:43

0

存在fbAsyncInit「靜態」屬性

嘗試以下

if (window.fbAsyncInit && window.fbAsyncInit.hasRun) { 
    // do sth 
} 
+2

我不認爲這會等到fbAsyncInit運行。 – TheLQ 2012-09-05 15:24:20

+0

這實際上很有幫助謝謝。 – Eduardo 2012-11-28 11:25:02

2

有時,facebook api可以在第二個fbAsyncInit啓動之前調用fbAsyncInit。這將修復這種情況:

 if (window.fbAsyncInit.hasRun === true) { 
      setup(); // do something 
     } else { 
      var oldCB = window.fbAsyncInit; 
      window.fbAsyncInit = function() { 
       if (typeof oldCB === 'function') { 
        oldCB(); 
       } 
       setup(); // do something 
      }; 
     }