2012-02-09 5 views
3

私のサイトでは、Facebook JS SDKの非同期読み込みを使用しています。実際にそれを設定するには、window.fbAsyncInit関数の中で標準FB.initを使用します。複数のfbAsyncInit?

しかし私のサイトでは、この機能はすべてのページにあります。しかし私がサブページに入っているとき、自分のサイトのデザインのためにJS関数に直接追加することはできないので、関数全体をコピー&ペーストしてビットを追加する必要があります。

私は複数のfbAsyncInitが可能であるとは思わないので、これを実装する最良の方法は何ですか?

+0

どのように「サブページ」を意味しますか? – DMCS

答えて

5

あなたはすでにfbAsyncInitを持っており、その場合にはtoghetherそれをチェーンかどうかをチェックする代わりにこれを使用することができます:

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

おっと、私はこの質問を忘れていました。より多くの検索の後、私はその機能を "拡張"する方法を見つけました。うまくいけば、これは他の誰かを助けるでしょう。ありがとう! – TheLQ

+0

これがこれを「公式に」行う方法であるかどうか知っていますか? Facebookが別の方法を提案している、またはこれを解決する方法がある? _all_あなたのJSコードを1か所に置いておきたい場合を除き、かなり一般的なことです。 – powerbuoy

+0

@powerbuoyこれとは異なる「公式」な方法があるかどうかはわかりません。しかし、これはハックではありません。これはjavascriptのためのかなり一般的なデザインパターンです。 – Eduardo

0

fbAsyncInit

で「静的」プロパティが

下回ってみあり
if (window.fbAsyncInit && window.fbAsyncInit.hasRun) { 
    // do sth 
} 
+2

fbAsyncInitが実行されるまで待つとは思えません。 – TheLQ

+0

これは本当に有益です。 – Eduardo

2

2番目のfbAsyncInitが開始される前に、facebook apiが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 
      }; 
     }