当访问的弹出窗口关闭时,浏览器会阻止新的弹出窗口进行共享。有可能给出权利并打开窗口共享? (没有阻止弹出窗口)
$.ajaxSetup({ cache: true });
$.getScript('//connect.facebook.net/en_US/sdk/debug.js', function(){
FB.init({
appId : '856902511027949',
status : true,
cookie : true,
xfbml : true,
oauth : true,
version : 'v2.2'
});
});
function shareViaFbApp() {
FB.ui({
method: 'share',
href: 'https://developers.facebook.com/docs/',
display: 'popup'
}, function(response){
console.log(response);
});
}
$(".init").on('click', function(event) {
event.preventDefault();
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
shareViaFbApp();
} else {
FB.login(function(response) {
console.log(response);
if (response.authResponse) {
shareViaFbApp();
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'publish_actions'});
}
});
});
我只看到一种解决此问题的方法,在FB.login()之后创建一个像fb popup共享的块,并通过FB.api()进行共享。
答案 0 :(得分:0)
您不应在FB.login
的异步回调中使用FB.getLoginStatus
。我知道这是Facebook文档中的一个例子,但它错了,现代浏览器会阻止它。在页面加载时使用FB.getLoginStatus
(刷新用户会话并检查用户是否已登录)和FB.login
直接在用户交互(鼠标单击)上。
您也不应自动使用FB.ui
,仅限于FB.login
等直接用户互动。
顺便说一句,您不需要为FB.ui
授权用户,它也可以在没有FB.login
的情况下使用。
答案 1 :(得分:0)
所以,我找到了解决方法,如果您在提供对fb应用的访问权限后需要显示共享对话框,请使用 display:'iframe'。
function shareViaFbApp(afterAccess) {
var display;
if (afterAccess) {
display = 'iframe';
} else {
display = 'popup';
}
FB.ui({
method: 'share',
href: 'https://developers.facebook.com/docs/',
display: display
}, function(response){
console.log(response);
});
}
$(".init").on('click', function(event) {
event.preventDefault();
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
shareViaFbApp();
} else {
FB.login(function(response) {
console.log(response);
if (response.authResponse) {
shareViaFbApp(true);
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'publish_actions'});
}
});
});