[英]FB.ui feed popup blocked after fb.login
这是代码流,首先是登录并且运行良好,但是在那之后我想立即调用feed函数,这可能是浏览器阻止它的原因,还有其他方法可以做到这一点吗? 如果将显示设置为iframe,则其效果很好,但我真的希望将其作为弹出窗口。 火车
<a href="#" onclick="fblogin()">Share</a>
功能
function fblogin() {
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', {fields: 'last_name, first_name, gender, email, id'}, function(reslog) {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
postToFeed(reslog.gender);
}
});
});
} else {
//console.log('X');
}
}, {scope:'email'});
}
postToFeed
function postToFeed(gender) {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
FB.ui( {
method: 'feed',
display: 'popup',
[...]
}, function( response ) {
console.log( 'before',response );
if ( response !== null && typeof response.post_id !== 'undefined' ) {
console.log( 'done',response );
}
});
}
});
}
您必须直接在用户交互时调用FB.ui
对话框(=在鼠标事件的回调函数中)。 FB.getLoginStatus
是异步的,这就是(好的)浏览器阻止它的原因。
FB.getLoginStatus
在页面加载时使用FB.getLoginStatus
,并存储状态。 或FB.ui
是:将其删除,因为您不需要为FB.ui
对话框授权用户。 而且在您的代码中这没有任何意义,因为您仅在FB.login
之后甚至在API调用之后才使用它-因此,用户一定可以登录。
FB.login
也是异步的,尝试在登录后立即向用户显示共享对话框不仅使用户烦恼,而且违反了恕我直言的规则。 我认为这是“激励”:
仅鼓励他人登录您的应用,在应用的页面上输入促销信息或在某个地方签到。 不要激励其他行动。
资料来源: https : //developers.facebook.com/policy/
新代码:
HTML:
<a href="#" onclick="postToFeed()">Share</a>
JavaScript函数“ postToFeed”:
FB.ui( {
method: 'feed',
display: 'popup',
[...]
}, function( response ) {
console.log( 'before',response );
if ( response !== null && typeof response.post_id !== 'undefined' ) {
console.log( 'done',response );
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.