我正在使用Facebook共享对话框来共享特定网址。共享链接包含一个图像,该图像应该是以后共享的一部分。关于这一点的奇怪之处在于它在移动浏览器上完全正常。但桌面浏览器不会在第一次尝试时加载图像。只需重新加载共享窗口即可修复丢失的图像。一旦此图像显示至少一次,它将继续在其他浏览器中工作,无需额外重新加载..
所以我的问题是:有人知道为什么这个网址的第一次调用没有显示图像吗?
详情
Link for opening the sharing dialog
以下是Facebook调试器的输出,它没有错误并显示图像。
更新
似乎无需任何问题即可使用Feed对话框。但这是另一种共享方式,我想阻止它,因为它需要一个App ID。
答案 0 :(得分:24)
我也遇到过这个问题,事实证明Facebook有一个没有文档记录的功能"可能已经实现了优化。它不会在第一次共享期间加载您的图像。
可以在此处找到错误说明: https://developers.facebook.com/bugs/657696104321030
简而言之,解决方案是两种可能性之一。
最简单的方法是将og:image:width和og:image:height作为描述图像像素宽度和高度的ogtags的一部分。奇怪的是,这将(显然设计)说服Facebook立即抓住网站,包括图像。
< meta property =" og:image" content =" http://example.com/image.jpg"/>
< meta property =" og:image:width"含量=" 450" />
< meta property =" og:image:height"含量=" 298" />
第二个可能的解决方案是通过API手动触发刮擦。我没有测试过这个,但理论上它是可能的。有关此主题的信息,请参阅the relevant Stackoverflow discussion。
答案 1 :(得分:2)
Facebook显示缓存图片。它是第一次提交共享或Facebook抓取工具在您的页面上找到og:image标签时这样做。
据https://developers.facebook.com/docs/sharing/best-practices#pre-cache-images的Facebook文档
“我们的一些社交插件会在有人与他们互动时呈现图像。图像基于页面上的og:图像,或者如果未设置og:图像,则基于页面上的其他图像。社交插件可以渲染图像Facebook的抓取工具必须至少看一次图像。对于页面频繁更改的网站(例如电子商务),点击这些插件的第一个人将看不到渲染图像。“
答案 2 :(得分:0)
我终于认为我发现了这个问题。我想要共享的图像是由PHP脚本而不是普通文件提供的。它似乎与PHP提供图像的方式有关:
坏:
echo readfile($image_thumb_file);
好:
$fp = fopen($image_thumb_file, "rb");
fpassthru($fp);
执行此更改后,我的图像最终出现在Facebook调试器中。
答案 3 :(得分:0)
我找到了另一种方法来强制facebook抓取工具在点击分享按钮之前检查页面:只需在sharer facebook链接中包含一个隐藏的iFrame。
示例:
Random random = new Random();
for(Criteria c: template){
count = 0;
while(c.getNoOfQuestion() > count){
index = random.nextInt(list.size());
答案 4 :(得分:0)
您还可以查看og:image:width
和og:image:height
属性
这对我有用。