Facebook LIke通过Ajax进行更新——这不是一个简单的问题



我创建了一个视频页面,当文件存储在服务器上时,该页面使用数据库动态加载视频。一段视频被预装在页面上,这些数据可以被点赞并发布到Facebook上,不会有任何问题。当点击新的缩略图时,我希望类似Facebook的信息更改为新的视频内容(标题、url和图像)。我一直在寻找一个解决方案,有很多类似的解决方案,但他们添加FB.XFBML.parse();的简单解决方案对我不起作用。当Ajax调用成功返回时,我使用更新我的元标记

$("meta[property=og\:title]").attr('content', videoTitle); 
$("meta[property=og\:url]").attr('content', "www.mySiteURL.com/index.php?videoID="+videoID);
$("meta[property=og\:image]").attr('content', "www.mySiteURL.com/images/video/"+videoImageName);

但是,当我在设置完这些之后立即运行解析代码时,我会看到按钮刷新,但它仍然具有相同的内容。我可以看到元标签实际上是使用Firebug更新的。只是FB按钮没有正确地重新抓取要发送到FB的页面信息。我在html标记中设置了名称空间,还设置了其他og:meta,但这三个是我需要重新刮取的。

我在一篇帖子中看到,有人直接在主页上使用了类似于ajax.complete(function(){FB.XFBML.parse();});的东西,我不记得确切的代码,但想法是一样的,但仍然不起作用。我认为只要在我的ajax函数中运行它,一旦成功,就足够了。

我遗漏了什么吗?

如有任何帮助,我们将不胜感激!

谢谢。

编辑:我应该补充一点,每个视频都有自己的直接URL,插入到og:URL中,因为它们都是通过ajax加载的。当我使用其中一个唯一的URL时,Facebook Linter/Object Debugger会向我显示每个视频的所有正确数据,这只是一个抓取问题——至少,在我有限的知识范围内,这对我来说似乎就是这样

听起来你可能一直在动态更改当前页面的元标签-这不是必要的,并且会导致Facebook的抓取问题(你可以使用Facebook的调试工具验证)-

为每个对象维护一个静态URL,提供该URL的元标签(如果需要,您可以重定向其他浏览器),并在动态页面上更改"点赞"按钮本身以指向当前显示的对象的URL(即删除"点赞按钮",添加新的fb:Like标签并重新调用FB.XFBML.parse();)

我应该补充一点,每个视频都有自己的直接URL,插入到og:URL中,因为它们都是通过ajax加载的。当我使用其中一个唯一的URL时,Facebook Linter/Object Debugger会向我显示每个视频的所有正确数据,这只是一个抓取问题——至少,在我有限的知识范围内,这对我来说似乎就是这样

不,这不是一个抓取问题,因为抓取器不关心您的JavaScript,因此永远看不到您更新客户端的元标记。它向您的服务器发出HTTP请求,因此您在当前显示页面的任何类型的客户端中所做的操作都是完全无关的。

你需要做的是更新点赞按钮指向的目标URL:用包含当前视频页面URL的href属性的新点赞按钮代码替换现有的点赞按钮,运行FB。XFBML.解析它,然后它将按预期工作。

您可能应该在更新元标记后调用FB.XFBML.parse();,这将导致FBML标记再次呈现。

有关FB.XFBML.parse();的更多信息,请点击

最新更新