首先,我正在使用react,我发现在特定组件中加载脚本的唯一方法是使用引用动态添加它。我不喜欢它,但对话框显示正确,消息传递。
我的问题是iframe在发送邮件后没有自动关闭。
我在Send Dialog documentation和Facebook 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();
答案 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无法将你重定向到一个未知的域名,因此它会打开对话框。