Facebook graph api 在调用FB.init()之前调用了FB.login()

Facebook graph api 在调用FB.init()之前调用了FB.login(),facebook-graph-api,facebook,Facebook Graph Api,Facebook,这个问题我已经见过好几次了。大多数情况下,用户称facebook js(all.js)两次或没有提供应用程序id。但我的情况不同。我已经包含了所有的.js文件一次,并且设置了应用程序id。但是当我单击login按钮时,仍然会出现这样的错误:“在调用FB.init()之前调用FB.login()”。登录按钮的标记如下所示 <fb:login-button autologoutlink="true" perms="email,user_birthday,user_about_me,publis

这个问题我已经见过好几次了。大多数情况下,用户称facebook js(all.js)两次或没有提供应用程序id。但我的情况不同。我已经包含了所有的.js文件一次,并且设置了应用程序id。但是当我单击login按钮时,仍然会出现这样的错误:“在调用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>

FB.init({appId:'${section.parameters['facebook.app.id']}),状态:true,cookie:true,xfbml:true});
/*所有事件都已登记*/
FB.Event.subscribe('auth.login',函数(响应){
window.location.reload();
});
FB.Event.subscribe('auth.logout',函数(响应){
//做些有反应的事情
//注销();
});
函数setFacebookStatus(表单){
var status=$(“#注释表单正文”).val();
var params={};
参数['message']=状态;
params['link']='${article.url}';
api('/me/feed',post',参数,函数(响应){
如果(!response | | response.error){
警报(“发生错误”);
}
否则{
警报(“”);
$(“#facebookComment”).overlay().close();
表单提交();
}
});
}
我已经在html页面的标题中添加了all.js。我真的很生气这个问题。如果你能帮助我,我将非常感激

编辑


还有一件事要提。有时它起作用,有时它向我发出警告。假设我从另一个标签登录到facebook,然后从facebook注销。然后我刷新我的网站页面,该页面集成了facebook。然后我得到了警告。主要的问题是它有时工作有时不工作。

我修改了我的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');
      })
$(函数(){
window.fbAsyninit=函数(){
FB.init({appId:'${section.parameters['facebook.app.id']}),状态:true,cookie:true,xfbml:true});
};
$('body')。追加('');
$.getScript(document.location.protocol+'//connect.facebook.net/en_US/all.js');
})

setFacebookStatus函数保持不变。在DocumentReady上添加这些脚本可以消除facebook javascript警告和不确定登录行为的问题。我的猜测是,在准备好文档的情况下,FB脚本的初始化可以确保按要求的顺序执行所有调用。

在加载页面时,您是否收到任何可能阻止调用FB.init的Javascript错误?不,我没有收到任何Javascript错误。还有一件事要提。有时它起作用,有时它向我发出警告。假设我从另一个标签登录到facebook,然后从facebook注销。然后我刷新我的网站页面,该页面集成了facebook。然后我得到了警告。主要的问题是,有时它工作,有时不工作。你能显示一个链接到你的页面,或创建一个展示问题的例子吗?请检查Facebook弹出窗口中的JSFIDLE演示,我得到消息
sunjavax出现错误。请稍后再试。