我已经编写了这段代码,但只有在我已登录facebook时它才有效,否则会出现一个弹出窗口,需要我在Facebook上登录电子邮件和密码。
这是代码:
window.fbAsyncInit = function () {
FB.init({
appId: 'xxx',
frictionlessRequests: true,
status: true,
cookie: true,
xfbml: true,
oauth: true
});
function update(response) {
if (response.authResponse) {
FB.api('/me', function (info) {
login(response, info);
});
} else {
}
}
FB.getLoginStatus(update);
};
(function () {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
function login(response, info) {
if (response.authResponse) {
publish();
}
}
function publish() {
var publish = {
method: 'feed',
access_token: '<?php echo $token; ?>',
message: 'How are you ?',
name: 'hi friends',
caption: 'yuhuuuuuuuu',
description: (' '),
link: 'http://www.example.com',
picture: 'http://cdn1.hark.com/images/000/004/514/4514/original.jpg',
actions: [{
name: 'Hello',
link: 'http://www.example.com/'
}],
user_message_prompt: 'Share on facebook'
};
FB.ui(
publish, function (response) {
if (response && response.post_id) {
alert('Post was published.');
} else {
alert('Post was not published.');
}
});
}
答案 0 :(得分:0)
在update
方法的空白else
中,您应该调用FB.login方法:
调用FB.login会提示用户验证您的应用程序 使用OAuth对话框。
但是,你不能这样做:
function update(response) {
if (response.authResponse) {
FB.api('/me', function (info) {
login(response, info);
});
} else {
FB.login(function(response) {
if (response.authResponse) {
console.log("user is logged in!", response.authResponse);
}
});
}
}
因为它在文档中说明:
调用FB.login会导致JS SDK尝试打开弹出窗口 窗口。因此,只应在用户单击后调用此方法 事件,否则大多数浏览器都会阻止弹出窗口。
您必须向用户显示一个按钮或某些内容,告诉他点击才能登录,然后您可以调用FB.login
方法。