что такое FB.Arbiter.inform?

#javascript #facebook

#javascript #Facebook

Вопрос:

что именно делает FB.Объект арбитра внутри «connect.facebook.net/en_US/all.js «?

это что-то для связи между iframes? внутри FB есть функция inform .Арбитр, который создает невидимый iframe внутри приложения iframe.

это источник функции inform:

 function (d, f, g, c, a) 
{
    if (FB.Canvas.isTabIframe() || FB._inPlugin amp;amp; window.postMessage || !FB._inCanvas amp;amp; FB.UA.mobile() amp;amp; 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);
        }
    });
}
  

может кто-нибудь объяснить эту функцию?

Ответ №1:

В 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"} передаются ему в качестве второго аргумента. (Первый аргумент справедлив "id/id" .)

Другими словами, Arbiter.inform() запускает события в системе событий Facebook.

Комментарии:

1. отличное объяснение, спасибо! Знаете ли вы, есть ли простой способ регистрировать все события facebook, которые отправляются в систему арбитров?

2. @user280109 Я не знаю, можете ли вы просто Arbiter.subscribe("*/*", my_function) или нет. Возможно, вы могли бы попробовать. Другим способом сделать это было бы перехватить Arbiter.inform() функцию, например: var Arbi = Arbiter.inform; Arbiter.inform = function(id, data){console.log(id, data); Arbi(id, data);}