以下代码以前有效但现在没有。由于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>
我怀疑这是新Facebook更新的错误。你可以在这里搜索问题https://developers.facebook.com/bugs,如果还没有报告,也可以发布一个新的bug
您无法再订阅edge.create
。在这个时候(04/2018),它仍然在documentation,但它已被弃用,并在不久的将来被完全删除。
根据设计,第三方应用程序无法知道何时单击Like button。
您需要以不需要了解iframe中提供的Facebook Like按钮的方式设计您的应用程序。
引用此bug report:
不推荐使用edge.create事件(https://developers.facebook.com/docs/plugins/faqs/),因此工程师决定不为此情况修复它,因为它将在未来的api版本中完全取出。
来自this one:
我知道这对您很重要,但不幸的是,由于政策问题,我们故意进行了弃用。
开发人员不应再检查用户按下了什么。
这些活动将无法再访问。作为替代方案,您可以使用我们的Webhooks,并在每次有人喜欢您的某个Facebook页面时收到通知。
到目前为止的工作方案
<!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>