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

3

我在 Stack Overflow 上多次看到了这个问题。大多数情况下,用户会两次调用 Facebook 的 js 文件(all.js),或者未提供应用程序 id。但是我的情况不同。我只引用了一次 all.js,并设置了应用程序 id。但是当我单击登录按钮时,仍然出现“FB.login() called before calling FB.init()”错误。登录按钮的标记如下:

<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的网站页面,然后就会出现警告。主要问题是有时它可以工作,有时不能。

当页面加载时,您是否遇到任何可能会阻止FB.init被调用的Javascript错误? - shanethehat
不,我没有收到任何 JavaScript 错误。还有一件事要提及的是,有时它可以正常工作,有时它会显示警告。比如当我在另一个选项卡中登录 Facebook,然后从 Facebook 登出后,再刷新我网站上与 Facebook 集成相关的页面时,就会出现警告。主要问题在于有时它能够正常工作,而有时则不行。 - MAK Ripon
你能展示一个链接到你的页面,或者创建一个展示问题的例子吗? - shanethehat
请查看 jsfiddle 演示 http://jsfiddle.net/CaMyw/2/ - MAK Ripon
在 Facebook 弹出窗口中,我收到消息“sunjavax 出现错误。请稍后再试。” - shanethehat
1个回答

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 脚本的初始化确保按所需顺序执行所有调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接