以下代码以前有效,但现在没有。由于FB在喜欢页面时添加了确认框,因此在确认后不再触发edge.create。
<div class="fb-page" data-href="{{ $fbPageUrl }}" data-tabs="timeline" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"></div>
<script>
$(document).ready(function() {
$.getScript('//connect.facebook.net/en_US/sdk.js', function(){
FB.init({
appId : 'xxxxxxxxxxxxxx',
xfbml : true,
version : 'v2.9'
});
FB.Event.subscribe('edge.create', function(response) {
alert('Fired!');
});
});
});
</script>
答案 0 :(得分:5)
您无法再订阅edge.create
。目前(04/2018),它仍在documentation,但已被弃用,并在不久的将来完全删除。
按照设计,第三方应用程序无法知道何时单击Like button。
您需要以不需要了解iframe中提供的Facebook赞按钮的方式设计您的应用。
引用此bug report:
不推荐使用edge.create事件(https://developers.facebook.com/docs/plugins/faqs/),因此工程师决定不为此案例修复它,因为它将在未来的api版本中完全取出。
来自this one:
我知道这对您很重要,但不幸的是,由于政策问题,我们故意进行了弃用。
开发人员不应再检查用户按下了。
答案 1 :(得分:2)
我怀疑这是来自Facebook新更新的错误。您可以在此处https://developers.facebook.com/bugs搜索问题,如果尚未报告,也可以发布新错误
答案 2 :(得分:2)
答案 3 :(得分:0)
目前有效的解决方案:
<!doctype html>
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta charset="utf-8">
<title>Facebook Like Button</title>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function () {
FB.init({appId: '1906177386133148', status: true, cookie: true, xfbml: true});
FB.Event.subscribe("edge.create", function (targetUrl) {
console.log('edge.create');
});
FB.Event.subscribe("edge.remove", function (targetUrl) {
console.log('edge.remove');
});
};
(function () {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/es_ES/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<fb:like></fb:like>
</body>
</html>