2011-10-20 3 views
2

どうすればFB.Arbiterオブジェクト内"connect.facebook.net/en_US/all.js"?FB.Arbiter.informとは何ですか?

iframe間のコミュニケーションのためのものですか? 内にはFB.Arbiterのiframeアプリ内に見えないiframeを作成する機能があります。

これは、通知機能の源である:

function (d, f, g, c, a) 
{ 
    if (FB.Canvas.isTabIframe() || FB._inPlugin && window.postMessage || !FB._inCanvas && FB.UA.mobile() && window.postMessage) 
    { 
     var e = FB.JSON.stringify({ 
      method : d, params : f, behavior : a || FB.Arbiter.BEHAVIOR_PERSISTENT 
     }); 
     if (window.postMessage) { 
      FB.XD.resolveRelation(g || "parent").postMessage(e, "*"); 
      return; 
     } 
     else { 
      try { 
       window.opener.postMessage(e); 
       return; 
      } 
      catch (b) { } 
     } 
    } 
    var i = FB.getDomain((c ? "https_" : "") + "staticfb") + FB.Arbiter._canvasProxyUrl + "#" + FB.QS.encode(
    { 
     method : d, params : FB.JSON.stringify(f || {}), behavior : a || FB.Arbiter.BEHAVIOR_PERSISTENT, 
     relation : g 
    }); 
    var h = FB.Content.appendHidden(""); 
    FB.Content.insertIframe(
    { 
     url : i, root : h, width : 1, height : 1, 
     onload : function() 
     { 
      setTimeout(function() 
      { 
       h.parentNode.removeChild(h); 
      }, 10); 
     } 
    }); 
} 

誰かがこの機能を説明することができますか?

答えて

4

Facebookには、イベントを管理するArbiterというクラスがあります。それは基本的にFacebookの独自のイベントシステムです。 Arbiter.subscribe("id/id",function_name)を使用して、関数にイベントをバインドすることができます。 "id/id"は、イベントのカスタム名を識別する文字列です。 Arbiter.inform("id/id",{data:"in an object"})を呼び出すと、同じ"id/id"を使用してサブスクライブした関数、たとえばfunction_name()が呼び出され、{data:"in an object"}が2番目の引数として渡されます。 (最初の引数は"id/id"です)

つまり、Arbiter.inform()は、Facebookのイベントシステムでイベントを発生させます。

+0

すばらしい説明、ありがとう! Arbiterシステムに送られるすべてのFacebookのイベントを記録する簡単な方法があるかどうか知っていますか? – user280109

+1

@ user280109「Arbiter.subscribe( "*/*"、my_function)かどうかは頭の上からわかりません。あなたは、おそらく試みることができます。もう一つの方法は 'Arbiter.inform()'関数をハイジャックすることです: 'var Arbi = Arbiter.inform; Arbiter.inform = function(id、data){コンソール。ログ(ID、データ); Arbi(id、data);} ' – wecsam

+0

素晴らしい!それは素晴らしい作品です、多くの感謝! :D – user280109