为什么Facebook共享按钮从元标记中提取参数而不是我指定的参数?

时间:2013-12-20 00:36:16

标签: javascript facebook share

我曾经在动态创建的页面中拥有共享按钮,该页面共享页面中的特定内容:

<a class="share" onclick="window.open('http://www.facebook.com/sharer.php?s=100&amp;p[title]=TITLE&amp;p[summary]=SUMMARY&amp;p[url]=http://www.facebook.com&amp;&amp;p[images][0]=imageurl', 'newwindow', 'width=555, height=315'); return false;"></a>

这导致了一个共享窗口,其中包含在上面代码(TITLE,SUMMARY,IMAGEURL,URL等)中的参数中指定的内容。然而,似乎最近Facebook弃用了这段代码,现在发生的事情是,当你尝试分享时,你会看到我指定的参数,但是一旦你在Facebook上发布它们就会出现不同的内容!

似乎Facebook不会查看我指定的参数,而是抓取URL中指定的页面,并在该页面上的元标记内查找信息。这意味着页面上的所有共享按钮现在都发布了相同的元标记。

任何人都知道如何解决此问题或基本上共享自定义内容?

2 个答案:

答案 0 :(得分:2)

您可以在服务器上创建一个文件,该文件使用正确的元标记提供有效的HTML文件。

<强> shared.php标题=你好&安培;描述= FooBar的&安培;图像= URL&安培;链接= LINKURL

<html><head>
  <meta property="og:title" value="<?php echo $_GET['title'] ?>" />
  <meta property="og:description" value="<?php echo $_GET['description'] ?>" />
  <meta property="og:image" value="<?php echo $_GET['image'] ?>" ?>
  <script type='text/javascript'>
     setTimeout(function() { 
        document.location = "<?php echo $_GET['link'] ?>"; }, 500
     );
  </script>
</head></html>

现在只需使用sharer.php传递此文件,将所有参数传递给此文件,如下所示:

<div 
    class="fb-share-button" 
    data-href="http://YOURSERVER.com/shared.php?title=Hello&amp;description=FooBar&amp;image=URL&amp;link=LINKURL" 
    data-type="button_count">
</div>

或者使用原始的JS代码:

<a class='share' onclick="window.open('https://www.facebook.com/sharer/sharer.php?app_id=YOURAPPID&sdk=joey&u=http%3A%2F%2Fyourserver.com%2Fshared.php%3Ftitle%3DHello%26description%3DFooBar%26image%3DURL%26link%3DLINKURL&display=popup', 'newwindow', 'width=555, height=315'); return false;"></a>

当Facebook抓取您的网址时,由于它传递了相同的网址参数,因此每次都会创建相同的元标记。

需要稍微延迟Javascript网址重定向,以避免Facebook抓取工具通过重定向到达最终目的地;用户点击Facebook Feed中的链接仍会被重定向到最终位置。

答案 1 :(得分:0)

我能够找到解决方案的答案!我发现Facebook在2013年10月发布了针对Feed对话方法的更新,打破了旧的共享代码。这篇文章提供了更新共享代码到Feed对话方法的建议,以符合2013年10月的重大变化:https://developers.facebook.com/docs/reference/dialogs/feed/

我刚刚为重定向添加了额外的参数 - TITLE&amp;图片(您可以在该页面的底部看到所有可用参数的列表),并且能够匹配外观和图像。感受到旧的分享信息。还必须指定应用ID。刚测试了一切,它似乎再次起作用。

https://www.facebook.com/dialog/feed?app_id=145634995501895&display=popup&caption=SUMMARY&link=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fdialogs%2F&redirect_uri=https://developers.facebook.com/tools/explorer&name=TITLE