如何在完成后自动关闭Facebook发送对话框(v2.9)?

时间:2017-06-30 14:24:09

标签: javascript facebook reactjs

首先,我正在使用react,我发现在特定组件中加载脚本的唯一方法是使用引用动态添加它。我不喜欢它,但对话框显示正确,消息传递。

我的问题是iframe在发送邮件后没有自动关闭。

我在Send Dialog documentationFacebook Sdk documentation进行了搜索,但仍然无法进行搜索。

非常感谢任何建议

谢谢

代码:

$query = "SELECT column1,column2,column 3 FROM models WHERE (category = ? OR categeory_2 = ?) AND brand_name = ? ORDER BY year DESC, month DESC";
$stmt = $conn->prepare($query);
$stmt->bind_param("sss",$category['id'],$category['id'],$band_name['id']);
$stmt->execute();
$stmt->bind_result($col1,$col2,$col1);
$stmt->fetch();

2 个答案:

答案 0 :(得分:1)

因此,只需运行JS Facebook提供而不是创建新的脚本元素,就可以在不使用ref方法的情况下插入FB脚本。创建一个新的脚本元素是非常多余的,因为当你可以直接运行JS时,你正在创建JS以便以后运行JS。换句话说,您可以删除您拥有的引用并在componentDidMount生命周期方法中执行以下操作:

class FbSendDialogComponent extends React.Component {
  componentDidMount() {
    window.fbAsyncInit = () => {
      FB.init({
        appId: '1419915028316261',
        autoLogAppEvents: true,
        xfbml: true,
        version: 'v2.9'
      })
      FB.AppEvents.logPageView()
    }

    var js, fjs = document.getElementsByTagName('script')[0];
    if (document.getElementById('facebook-jssdk')) {return;}
    js = document.createElement('script'); js.id = 'facebook-jssdk';
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }

  openDialog() {
    FB.ui({
      method: 'send',
      link: 'https://www.google.com/'
    })
  }

  render() {
    return (
      <div>
        <h4>You have no connections yet</h4>
        <a onClick={() => this.openDialog()}>Invite</a>
      </div>
    )
  }
}

(我会亲自清理他们的JS,使其更具可读性,因为你可能会在以后缩小你的代码,但上面的代码仍然有效。我也可能将fbAsyncInit方法提取到一个我必须做其他事情的单独模块,但这不属于这个问题的范围。)

iframe成功后的收盘而言,我不确定你指的是什么。当我在本地运行您的代码并单击“邀请”时,打开的对话框将按预期关闭。

答案 1 :(得分:0)

对于遇到同样错误的人,我在localhost上运行我的应用程序并且没有将此域添加到我的Facebook应用程序。我猜facebook无法将你重定向到一个未知的域名,因此它会打开对话框。