Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook共享不是第一次尝试抓取图像,而是在缓存发生后第二次尝试_Facebook_Image_Button_Share - Fatal编程技术网

Facebook共享不是第一次尝试抓取图像,而是在缓存发生后第二次尝试

Facebook共享不是第一次尝试抓取图像,而是在缓存发生后第二次尝试,facebook,image,button,share,Facebook,Image,Button,Share,我实现了一个使用sharer.php方法的共享按钮。图像在第一次尝试时不会被刮伤,但只有在第二次尝试后才会被刮伤。我假设它被Facebook服务器缓存之后 这是我的URL,以及当我点击共享按钮时会发生什么 任何帮助都将不胜感激 德里克我找到了一个解决这个问题的不那么优雅的方法。我发现在尝试共享新链接之前,我使用facebook刮板(调试器)时没有发生这种情况,因此我开始在用户共享链接之前搜索一种方法 这是我的解决方案,大约80%的时间都能正常工作(jQuery): 这有时会失败,根本没有响应

我实现了一个使用sharer.php方法的共享按钮。图像在第一次尝试时不会被刮伤,但只有在第二次尝试后才会被刮伤。我假设它被Facebook服务器缓存之后

这是我的URL,以及当我点击共享按钮时会发生什么

任何帮助都将不胜感激


德里克

我找到了一个解决这个问题的不那么优雅的方法。我发现在尝试共享新链接之前,我使用facebook刮板(调试器)时没有发生这种情况,因此我开始在用户共享链接之前搜索一种方法

这是我的解决方案,大约80%的时间都能正常工作(jQuery):

这有时会失败,根本没有响应,因此您可能需要添加如下内容:

$.post("https://graph.facebook.com/?id="+encodeURIComponent(url_to_be_shared)+"&scrape=true",
    function(contents){
        //here you do the facebook share code
    }).fail(function(){
        //call function again if failed
    });
正如我所说,这不是一个优雅的解决方案,它在80%的时间内都能工作,为了最大限度地发挥作用,我做了一个更不优雅的解决方案,并嵌套了三个(是的,三个)对facebook graph api的post调用,完成这三个调用大约需要2-5秒,但这很重要。这样做之后,我想也许我可以检查ajax.post响应,以检查它在找不到图像时是否会发生更改,这样我就可以对其进行迭代,但我还没有找到时间这样做,因此如果您最终检查了它,请让我知道


这是一个预缓存问题。检查这里:

酷黑客。我尝试了几种实现共享按钮的方法(FB-SDK-HTML5和Iframe/Telerik),但无法避免预缓存问题。这个黑客似乎确实做到了这一点。谢谢你说得对。上述黑客似乎通过在点击ShareButtonHoly heck之前预缓存URL来解决这个问题。添加og:image:width/height标签保存了我的培根,这太棒了。非常感谢。
$.post("https://graph.facebook.com/?id="+encodeURIComponent(url_to_be_shared)+"&scrape=true",
    function(contents){
        //here you do the facebook share code
    }).fail(function(){
        //call function again if failed
    });