2014-10-03 102 views
4

我期待检测一个页面上的Facebook共享是否成功,并在成功后更改一个框的值。我可以很好地处理后者,但在执行实际共享检测方面稍微有些失落。我找到了Google,发现了FB.ui,但是我怎么才能将它实现到一个页面中并让它运行检测?检测Facebook共享成功?

+0

你为什么要检测它? – WizKid 2014-10-03 16:23:23

+0

如果他们在产品页面上完成分享,我们将为用户提供折扣/特价促销。 – 2014-10-03 16:50:14

+0

根据Facebook平台政策,您不能阅读https://developers.facebook.com/policy。所以,节省你的时间,你的网页不会被禁止从Facebook – WizKid 2014-10-03 16:52:10

回答

2

首先,你必须包括Facebook的sdk.js库来使用其所有方法(body标签开幕后最好右)

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

的问题与您http://jsfiddle.net/ysdp60cz/Facebook分享 VAR的范围。所以,在这个例子中,只是将其包含在窗口对象:

window.facebookShare = function(callback) { [...] 

我不知道你是如何安排你的代码,但是,这种改变就必须工作。

您可以点击此处查看:http://jsfiddle.net/benjasHu/3dhq9k21/

干杯。

+0

benjasHu,这个伎俩。我也做了一些小改动,把所有的javascript都放在了页脚中,除了刚开始的body标签之后的最初的sdk.js库调用。它像一个魅力! – 2014-10-06 13:47:50

+0

我很高兴你让它工作! :)如果您认为这是正确的答案,请将其标为正确;)谢谢! – benjasHu 2014-10-06 13:52:59

+0

巧妙地使用自定义回调,谢谢! – 2015-09-13 17:13:54

0

我不知道您是否使用Facebook SDK创建共享对话框,但使用SDK可以获得类似此类响应状态(当然,您必须首先加载facebook脚本):

FB.init({ 
    appId : 'your-app-id', 
    status : true, 
    xfbml : true, 
    version: 'v2.1' 
}); 

var facebookShare = function(callback) { 

    var options = { 
     method : 'share', 
     href : 'your-url-to-share' 
    }), 
     status = ''; 

    FB.ui(options, function(response){ 

     if (response && !response.error_code) { 
      status = 'success'; 
      $.event.trigger('fb-share.success'); 

     } else { 
      status = 'error'; 
      $.event.trigger('fb-share.error'); 
     } 

     if(callback && typeof callback === "function") { 
      callback.call(this, status); 
     } else { 
      return response; 
     } 
    }); 
} 

然后,您可以将点击事件分配给您的按钮来激发共享对话框。在此之后,调用回调或使用“对” jQuery的方法来知道响应状态:

$('your-facebook-share-button').on('click', function(e) { 
    e.preventDefault(); 

    facebookShare(function(response) { 
     // simple function callback 
     console.log(response); 
    }); 
}); 

// custom jQuery events 
$(document) 
    .on('fb-share.success', function(e) { 
     console.log('success events'); 
    }) 
    .on('fb-share.error', function(e) { 
     console.log('error events'); 
    }); 

我还没有测试此代码,但我认为这是可行的。

祝你好运!

+0

需要一点调整,但我认为这可能会有所帮助。我欣赏它benjasHu! – 2014-10-03 19:48:38

+0

不客气! – benjasHu 2014-10-03 20:10:53

+0

我尝试过调整,但我非常新的w/Facebook的API,并没有与js/jQuery(还!)最大。 这看起来像我在正确的轨道上吗? [链接](http://jsfiddle.net/ysdp60cz/)http://jsfiddle.net/ysdp60cz 请记住,我没有更新应用程序ID和网站的URL与适当的信息,该应用程序是公开的等。 – 2014-10-03 20:23:19