自定义Facebook分享按钮

19

我想分享我的网站文章到Facebook(包括内容、图片和标题)!

但是Facebook无法正确检测到图片。

在这种情况下,我将使用固定的图片URL。

这是我的代码:

<li>
    <a id="buttton"  href="http://www.facebook.com/sharer.php?s=100&amp;p[title]=<?php echo $title;?>&amp;p[summary]=<?php echo $summary;?>&amp;p[url]=<?php echo urlencode($url);?>&amp;p[images][0]=http://www.example.com/images/report/daily_report/KNDR/image(2).jpg" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=no,scrollbars=no,height=400,width=600'); return false;">
        <img src="<?php echo base_url()?>media/images/share.png" alt=""/>
    </a>
</li>

Facebook没有分享我的展示图片! - Bahrami-Reza
7个回答

46
你可以使用Facebook的JavaScript SDK。首先将FB JS SDK添加到你的代码中(请参考https://developers.facebook.com/docs/javascript)。
window.fbAsyncInit = function(){
FB.init({
    appId: 'xxxxx', status: true, cookie: true, xfbml: true }); 
};
(function(d, debug){var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if(d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; 
    js.async = true;js.src = "//connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";
    ref.parentNode.insertBefore(js, ref);}(document, /*debug*/ false));
function postToFeed(title, desc, url, image){
var obj = {method: 'feed',link: url, picture: 'http://www.url.com/images/'+image,name: title,description: desc};
function callback(response){}
FB.ui(obj, callback);
}

因此,当您想分享某些内容时

<a href="someurl.com/some-article" data-image="article-1.jpg" data-title="Article Title" data-desc="Some description for this article" class="btnShare">Share</a>

最后是用JS处理点击事件:

$('.btnShare').click(function(){
elem = $(this);
postToFeed(elem.data('title'), elem.data('desc'), elem.prop('href'), elem.data('image'));

return false;
});

这不行,你得到的postToFeed未定义。 - jetlej
它运行得很好,你确定已经添加了postToFeed函数吗?@jetlej,你能提供你的代码吗? - artuc
太棒了!!这个方法可行。我需要动态更改数据,而这就是解决方案。 - iamkristher
是的@DragosRizescu - artuc
我收到了“elem未定义”的错误。需要将第二行更改为“var elem = $(this);”。 - kapoko
有人能提供这个功能的示例吗? - error2007s

12

这个方案使用JavaScript来在用户点击自定义分享按钮时打开一个新窗口。

HTML:

<a href="#" onclick="share_fb('http://urlhere.com/test/55d7258b61707022e3050000');return false;" rel="nofollow" share_url="http://urlhere.com/test/55d7258b61707022e3050000" target="_blank">

  //using fontawesome
  <i class="uk-icon-facebook uk-float-left"></i>
    Share
</a>

在你的JavaScript文件中使用window.open函数。注意,window.open函数的参数为(url, 对话框标题, 宽度, 高度)。

function share_fb(url) {
  window.open('https://www.facebook.com/sharer/sharer.php?u='+url,'facebook-share-dialog',"width=626, height=436")
}

8

最好的方法是使用你的代码,然后将图片存储在你要链接到的页面中的OG标签中,这样Facebook就能够获取它们。

<meta property="og:title" content="Facebook Open Graph Demo">
<meta property="og:image" content="http://example.com/main-image.png">
<meta property="og:site_name" content="Example Website">
<meta property="og:description" content="Here is a nice description">

您可以在此处找到有关OG标签及其与共享按钮的使用方法的文档


你能发个链接给我吗?我可以看一下。 - Adam
我按照你说的添加了所有内容,但直到我添加了@artuc提供的解决方案之后,它才开始工作。该项目在本地主机上,因此目前无法提供URL。 - RN Kushwaha
2
当你分享链接时,Facebook自己的服务器会检查该URL的元标记,因此它在本地主机上不起作用。 - Adam

8

嗯,我在我的网站上使用这种方法:

<a class="share-btn" href="https://www.facebook.com/sharer/sharer.php?app_id=[your_app_id]&sdk=joey&u=[full_article_url]&display=popup&ref=plugin&src=share_button" onclick="return !window.open(this.href, 'Facebook', 'width=640,height=580')">

完美运作。


4

假设我们处于php代码环境中,变量$url包含用户想要分享的链接,您可以尝试以下方法来使用自定义图片:

<a class="facebook-share-button" href="https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode($url); ?>" target="_blank"><img src="/img/facebook-share-button.png" /></a>

或者对于纯文本使用以下内容:

<a class="facebook-share-button" href="https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode($url); ?>" target="_blank">share</a>

你可以使用CSS对链接进行样式设置。
HTML代码如下:
<a class="facebook-share-button" href="https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode($url); ?>" target="_blank"></a>

CSS代码如下:
.facebook-share-button {
    background-image: url("/img/facebook-share-button.png");
    display: inline-block;
    height: 32px;
    width: 32px;
}

.facebook-share-button:active,
.facebook-share-button:focus,
.facebook-share-button:hover {
    background-image: url("/img/facebook-share-button-hover.png");
}

好的回答,我只想添加一个target="_blank",否则分享后窗口会关闭。 - Stephen Kaufman

2
你可以简单地做以下操作:...
...
<head>
...
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId            : 'your-app-id', // you need to create an facebook app
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v3.3'
    });
  };
</script>
<script async defer src="https://connect.facebook.net/en_US/sdk.js"></script>
</head>
<body>
...
<button id="share-btn"></button>
<!-- load jquery -->
<script>
    $('#share-btn').on('click', function () {
        FB.ui({
            method: 'share',
            href: location.href, // Current url
        }, function (response) { });
    });
</script>
</body>

0
在你想分享的页面上加入Facebook按钮。
<a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://trial.com/news.php?newsid=<?php echo $content; ?>"> 

                    <img src="http://trial/new_img/facebook_link.png" style=" border: 1px solid #d9d9d9; box-shadow: 0 4px 7px 0 #a5a5a5; padding: 5px;" title="facebook_link" alt="facebook_link" />

                    </a>

这是一个依赖于浏览器的解决方案,如果用户的浏览器设置为在新标签页中打开链接,那么它将不会弹出新窗口,除非你编写一个js函数来实现。 - Emil Reña Enriquez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接