调用FB.init()之前调用FB.login()

时间:2011-08-02 09:20:05

标签: facebook-graph-api facebook

我已经多次在SO中看过这个问题了。大多数情况下用户称为facebook js(all.js)两次或未提供应用程序ID。但我的情况有所不同。我已经包含了all.js一次,我也设置了应用程序ID。但是当我点击登录按钮时,我仍然在调用FB.init()之前收到此错误“FB.login()”。登录按钮的标记如下

<fb:login-button autologoutlink="true" perms="email,user_birthday,user_about_me,publish_stream"></fb:login-button>

javascript代码

    <script type="text/javascript">
        FB.init({appId: '${section.parameters['facebook.app.id']}', status: true, cookie: true, xfbml: true});

        /* All the events registered */
        FB.Event.subscribe('auth.login', function(response) {
          window.location.reload();
        });
        FB.Event.subscribe('auth.logout', function(response) {
          // do something with response
          //logout();
        });

      function setFacebookStatus(form) {
            var status = $('#comment-form-body').val();
            var params = {};
            params['message']= status;
            params['link'] = '${article.url}';
            FB.api('/me/feed', 'post',params, function(response) {
              if (!response || response.error) {
                alert('Error occured');
              }
              else {
                alert('<fmt:message key="comment.form.facebook.success" />');
                $("#facebookComment").overlay().close();
                form.submit();
              }
            });
      }

    </script>

我在html页面的标题中添加了all.js。我真的很生气这个问题。如果你帮助我,我将非常感激。

修改

还有一件事需要提及。有时它有效,有时它会向我显示警告。说我从另一个标签登录到Facebook,然后我从Facebook登出。然后我刷新我的Facebook集成网站页面。然后我收到了警告。主要问题是有时它有时不起作用。

1 个答案:

答案 0 :(得分:4)

我已按如下方式修改了我的javascript,现在它正在运行。

    $(function() {
        window.fbAsyncInit = function() {
          FB.init({appId: '${section.parameters['facebook.app.id']}', status: true, cookie: true, xfbml: true});
        };
        $('body').append('<div id="fb-root"></div>');
        $.getScript(document.location.protocol + '//connect.facebook.net/en_US/all.js');
      })

setFacebookStatus 功能保持不变。在文档就绪上添加这些脚本可以消除facebook javascript警告和非确定性登录行为的问题。我的猜测是,FB脚本的文档就绪初始化可确保按所需顺序执行所有调用。