Facebook在共享URL中忽略我的部分查询字符串

时间:2013-09-30 17:35:26

标签: javascript jquery facebook facebook-sharer

我有一个带有Facebook Share按钮的页面。我要共享的URL上有一个查询字符串,我用javascript构建。以下是我如何生成要分享的网址。

queryString = "cup=blue&bowl=red&spoon=green"; 
//the values of this are actually generated by user input, don't think its important for this example though. So in this example its just a basic string.

siteURL = "http://example.com/?share=1&";
//the url without the query string

sharingURL = siteURL+queryString; 
//Combing the domain/host with query string.. sharingURL should = http://example.com?share=1&cup=blue&bowl=red&spoon=green


function FBshare(){
  shareURL = siteURL+queryString;
  console.log(shareURL);
  window.open(
     'https://www.facebook.com/sharer/sharer.php?u='+shareURL, 
     'facebook-share-dialog', 
     'width=626,height=436'); 
  return false;
}


$(".facebook").bind("click", function(){
   FBshare();
});

当facebook因某种原因抓取URL时,它会遗漏在queryString变量中创建的所有内容。因此,共享网址最终只是http://example.com/?share=1。任何想法为什么它离开queryString变量?正确的URL被放入console.log就好了,加上它在Facebook share.php URL中作为查询字符串(例如https://www.facebook.com/sharer/sharer.php?u=http://example.com/?share=1&cup=blue&bowl=red&spoon=green)..但Facebook上的实际链接不完整。

这是一个jsFiddle。 http://jsfiddle.net/dmcgrew/gawrv/

4 个答案:

答案 0 :(得分:17)

facebook网址如下:

https://www.facebook.com/sharer/sharer.php?u=http://example.com?share=1&cup=blue&bowl=red&spoon=green

第一个&和参数cup(以及其他参数)被解释为facebook网址的一部分。

使用encodeURIComponent(),它会对&

等特殊字符进行编码
shareURL = encodeURIComponent(siteURL+queryString);

答案 1 :(得分:1)

除了Jason P的回答,sharer.php早已被弃用。

相反,您应该使用Facebook Feed and Share对话框:https://developers.facebook.com/docs/reference/dialogs/feed/

这些提供了对共享对话框的更多控制,以及通过Facebook Debugger进行更好的调试。

答案 2 :(得分:1)

截至2014年10月,Facebook已弃用sharer.php和Facebook Feed and Share对话框。

链接共享的当前建议是使用“共享”对话框:

https://developers.facebook.com/docs/sharing/reference/share-dialog#redirect

答案 3 :(得分:0)

在这种特定情况下,我遇到了这个问题:

我将分享以下链接:

FB.ui({
  method: 'share',
  href: 'mysite.com?p=10&og=15',
}, function(response){});

Facebook抓取工具将从网址中删除og参数,然后抓取以下网址:mysite.com?p=10

原因

  1. 我请Facebook抓取工具抓取以下链接:mysite.com?p=10&og=15。抓取工具会向给定的URL发出请求,并得到如下响应:
<head>
    <meta property="og:url" content="mysite.com?p=10">
    <meta property="og:image" content="mysite.com?photo=1145">
    // more meta tags...
</head>
  1. Facebook抓取工具会在og:url元标记中获取我所证明的任何价值,然后向该URL发出请求并抓取该页面。

解决方案

我必须修正og:url元标记的值,以包括所有必需的参数。