我已经多次在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集成网站页面。然后我收到了警告。主要问题是有时它有时不起作用。
答案 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脚本的文档就绪初始化可确保按所需顺序执行所有调用。