登录后FB分享

时间:2014-11-16 22:35:46

标签: facebook facebook-javascript-sdk

当访问的弹出窗口关闭时,浏览器会阻止新的弹出窗口进行共享。有可能给出权利并打开窗口共享? (没有阻止弹出窗口)

$.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()进行共享。

2 个答案:

答案 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'});
    }
  });
});