为什么FB.Event.subscribe会被解雇?

时间:2011-02-26 06:15:42

标签: facebook

导致FB.Event.subscribe事件触发的原因是什么?

我知道点击一个fb:login-button元素可以触发它,但FB.Event.subscribe事件会在创建Facebook会话时触发。

当Facebook会话存在时,其他FBML元素是否会自动触发此事件,或者无论是否存在任何FBML元素,都会触发此事件?

3 个答案:

答案 0 :(得分:5)

FB.Event.subscribe本身不是一个事件,它就像addListener,它将一个事件挂钩到一个函数。您需要检查代码以查看您正在使用的事件:

  • auth.login - 用户登录时触发
  • auth.logout - 在用户注销时触发
  • auth.sessionChange - 会话更改时触发
  • auth.statusChange - 状态更改时触发
  • xfbml.render - 在调用FB.XFBML.parse()时触发
  • edge.create - 当用户喜欢某事时触发(fb:like)
  • edge.remove - 当用户不喜欢某事时触发(fb:like)
  • comments.create - 在用户添加评论时触发(fb:comments)
  • comments.remove - 当用户删除评论时触发(fb:comments)
  • fb.log - 在日志消息中触发

我认为您使用了auth.sessionChange 事件

答案 1 :(得分:2)

我遇到了同样的问题,但我找到的解决方案是:

  1. FB.init中,将参数状态设置为 false (在我看到的所有样本中,默认情况下都是如此)
  2. 使用 auth.statusChange
  3. 触发登录事件

    所以你会以类似的东西结束:

    <script>
        window.fbAsyncInit = function () {
            FB.init({
                appId: 'YOUR-APPID',
                channelUrl: '//www.YOUR-DOMAIN.com/channel.html',
                status: false,
                cookie: true,
                xfbml: true
            });
    
            FB.Event.subscribe("auth.statusChange", function (response) {
                if (response.authResponse)
                {
                    if (FBLoginCallback) FBLoginCallback();
                }
            });
        };
    
        (function (d) {
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/pt_BR/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
        } (document));
    </script>
    

    请注意,我创建了一个名为 FBLoginCallback()的回调函数,因此我可以在MasterPage中使用此代码,并在分离的页面中定义回调处理函数,每个页面都有其特定需求。

答案 2 :(得分:1)

您只能通过查看Facebook文档或查看JS SDK源代码来了解触发每个事件的内容。以下是这两者的链接:

在JS源代码中,查找对 FB.Event.fire(...)的调用。您可能需要进行更多分析以确定具体条件,特别是因为我的JS版本来自SDK的缩小版本。 Facebook目前尚未公布其实际来源,因此我们必须尽量减少最终的SDK。