2013-07-04 143 views
4

我在这里和周围的interwebs解释了如何为我的网站创建一个自定义的Facebook共享对话框。如何创建传递参数的自定义Facebook共享对话框?

但我发现从平均情况,矿井有一些区别:

1 - 我想自定义区域在我的网页打开和关闭,当人们点击一个按钮(分享按钮)

2-我想分享灯箱中的内容,而不是页面的内容。例如,我们有一个产品列表,每个产品将在Lightbox中打开。我想分享有关此产品现在在一个灯箱中打开的信息

我看到有人在谈论Javascript SDK,但它的安装指南告诉我设置APP_ID,但没有任何应用程序创建我的网站。我必须创建一个才能使用此SDK吗?

如果我复制并粘贴到它的工作原理地址栏我也发现了这种模式

http://www.facebook.com/sharer.php?s=100&p[title]=a title&p[summary]=a description &p[url]=http://www.linkhere.com&p[images][0]=http://www.linkhere.com/image.jpg 

。但用户被重定向到一个新的页面。那不好。

,我想这与上面的图案说,但不可能使它工作

<a href="#" 
      onclick=" 
      window.open(
       'https://www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(location.href), 
       'facebook-share-dialog', 
       'width=626,height=436'); 
      return false;"> 
      Share on Facebook 
     </a> 

它不接受我试图传递的参数。

你们有没有人知道如何解决这个问题?它会通过改变元标签的“内容”吗?你的解决方案是什么?

@EDIT

只是我使用的解决方案

@EDIT 2

更新了V2.2回答

回答

6

这是我做过什么来解决我的网站的问题:

首先,我添加了工具的Facebook为我提供:

<script> 
    window.fbAsyncInit = function() { 
    // init the FB JS SDK 
    FB.init({ 
     appId  : 'YOUR APP ID GOES HERE',      // App ID from the app dashboard  
     status  : true,         // Check Facebook Login status 
     xfbml  : true         // Look for social plugins on the page 
    }); 
    // channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel file for x-domain comms 
    // Additional initialization code such as adding Event Listeners goes here 
    }; 

    // Load the SDK asynchronously 
    (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/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

</script> 

然后,我创建了一个开放的共享者和按钮的功能shareOnFacebook这将调用这个函数

var globalFacebookShareObject = {} //will be set when I click on a product, on a picture, on a comment or post, or whatever I want to share on Facebook or when I load the page 

function shareOnFacebook(){ 
    FB.ui({ 
     method: 'feed', 
     name: globalFacebookShareObject.name, 
     link: globalFacebookShareObject.link, 
     caption: 'R$ '+globalFacebookShareObject.caption, 
     picture: globalFacebookShareObject.picture, 
     description: globalFacebookShareObject.description 
    }, function(response) { 
     if(response && response.post_id){} 
     else{} 
    }); 
} 

<button onclick='shareOnFacebook()'>Share it!</button> 

@edit在2015年10月1日 为V2仍在工作。2

参考,以Feed method了解如何创建共享对话框(我用的是feed方法,这似乎是更灵活)

并以Quickstart 要了解如何导入的Javascript SDK您

+1

感谢它的帮助.. –

+0

我相信'feed'现在已经在APIv2中被弃用了。只有共享是支持的,它似乎不允许覆盖OG属性。 – kamranicus

+1

仍然有效@subkamran –

11

这是一个老问题,但这里是我的工作是什么:

window.open(
     'http://www.facebook.com/sharer.php?s=100&p[title]=a title&p[summary]=a description &p[url]=http://www.linkhere.com&p[images][0]=http://www.linkhere.com/image.jpg', 
     'facebook-share-dialog', 
     'width=626,height=436' 
    ); 

基本上我所要做的就是删除/ sharer /来自facebook的网址。我猜这是文档中的一个错字。

+0

现在,这种方法将无法正常工作,它从详细的开放图或给定的网址。特别是使用规范它卡住。 –

+0

Open Graph是一个不同的故事。它告诉Facebook分享什么。 – HerrSerker