【问题标题】:Facebook Share Dialog does not display thumbnails one first loadFacebook 分享对话框第一次加载时不显示缩略图
【发布时间】:2013-07-29 00:50:55
【问题描述】:

我正在使用 Facebook 分享对话框来分享特定的网址。共享链接包含一个图像,该图像应该是稍后共享的一部分。奇怪的是,它在移动浏览器上运行良好。但是桌面浏览器在第一次尝试时不会加载图像。共享窗口的简单重新加载可修复丢失的图像。一旦此图像至少显示一次,它就会继续在其他浏览器中工作,而无需额外重新加载..

所以我的问题是:有谁知道为什么这个网址的第一次调用不显示图像?

详情

Link for opening the sharing dialog

这是 Facebook Debugger 的输出,没有错误并显示图像。

Facebook debugger output

更新

似乎可以毫无问题地使用 Feed 对话框。但这是我想阻止的另一种共享方式,因为它需要 App ID。

【问题讨论】:

标签: facebook image thumbnails share


【解决方案1】:

我也遇到过这个问题,事实证明 Facebook 有一个未记录的“功能”,可能是为了优化而实施的。它不会在第一次共享期间加载您的图像。

可以在这里找到错误描述: https://developers.facebook.com/bugs/657696104321030

简而言之,解决方案是两种可能性之一。

  1. 最简单的方法是将 og:image:width 和 og:image:height 作为 ogtag 的一部分,用于描述图像的像素宽度和高度。奇怪的是,这将(显然是设计上的)说服 Facebook 立即抓取该网站,包括图片。

    http://example.com/image.jpg"/ >

  2. 第二种可能的解决方案是通过 API 手动触发抓取。我没有测试过这个,但理论上是可能的。有关此主题,请参阅 the relevant Stackoverflow discussion

【讨论】:

  • 这为我解决了这个问题。无法相信整个 Facebook 共享设置是多么脆弱。即使在 2015 年。叹息......
  • 谢谢@Aron,我刚刚输入了宽度和高度,它起作用了,weeeird:O
  • 了不起的家伙!我在这件事上浪费了好几天,这让我发疯。我从来没有想过添加宽度和高度会解决问题。
  • 抱歉,我尝试使用您的代码但无法正常工作。这个时候有什么变化吗?谢谢。
【解决方案2】:

Facebook 显示缓存的图像。它会在首次提交分享或 Facebook 爬虫在您的页面上找到 og:image 标签时执行此操作。

根据 Facebook 文档https://developers.facebook.com/docs/sharing/best-practices#pre-cache-images

“我们的一些社交插件会在有人与它们交互时呈现图像。该图像基于页面上的 og:image,或者如果未设置 og:image 则基于页面上的其他图像。在社交插件可以渲染图像 Facebook 的爬虫必须至少看到一次图像。对于页面频繁更改的网站(例如电子商务),第一个点击这些插件的人不会看到渲染的图像。”

【讨论】:

    【解决方案3】:

    我找到了另一种方法来强制 facebook 爬虫在你点击分享按钮之前检查页面:只需在分享者 facebook 链接中包含一个隐藏的 iFrame。

    例子:

    <iframe src="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.example.com" style="width: 0px; height: 0px; margin: 0px; padding: 0px;"></iframe>
    

    【讨论】:

    • 您建议的解决方案可能有助于填充刮板缓存,但也会使您的服务器负载加倍。
    • 你是对的@sven 这取决于你的目的是什么:例如在这个网站上:daysoldage.com 每个结果都是不同的。对于博客,我不建议使用此技巧。
    【解决方案4】:

    我终于认为我找到了问题所在。我要分享的图像是由 PHP 脚本而不是普通文件提供的。这似乎与 PHP 传递图像的方式有关:

    不好:

    echo readfile($image_thumb_file);
    

    好:

    $fp   = fopen($image_thumb_file, "rb");
    fpassthru($fp);
    

    完成此更改后,我的图像最终出现在 Facebook 调试器中。

    【讨论】:

      【解决方案5】:

      您还可以查看og:image:widthog:image:height 属性。
      这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-11
        • 2013-05-26
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2011-02-26
        相关资源
        最近更新 更多