20

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

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

细节

打开共享对话框的链接

这是 Facebook 调试器的输出,它没有错误并显示图像。

Facebook 调试器输出

更新

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

4

5 回答 5

25

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

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

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

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

    <元属性="og:image" 内容=" http://example.com/image.jpg "/ >

    <meta property="og:image:width" content="450"/>

    <meta property="og:image:height" content="298"/>

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

于 2014-12-11T13:32:35.287 回答
2

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

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

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

于 2014-11-11T16:17:53.433 回答
0

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

坏的:

echo readfile($image_thumb_file);

好的:

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

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

于 2014-11-18T07:43:49.547 回答
0

我找到了另一种强制 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>
于 2016-05-31T12:36:19.647 回答
0

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

于 2017-03-29T15:53:33.407 回答