Facebook graph api Facebook';比如';按钮不存在';不要使用';:og';标签

Facebook graph api Facebook';比如';按钮不存在';不要使用';:og';标签,facebook-graph-api,ember.js,Facebook Graph Api,Ember.js,我目前正在开发一个Ember.js应用程序,我在社交按钮方面遇到了巨大的麻烦。我已经在这里做了一些研究,但没有什么帮助 我的应用程序使用历史API,og:标记在页面转换时被正确更改,但Facebook仍然使用我的index.html页面中的初始值。调用FB.XFBML.parse()也没有帮助 此外,FB OpenGraph Debugger为任何页面显示我的index.html中的信息,因此,我甚至无法调试它的错误 那么,有没有人遇到过类似的情况,并且可能找到了合适的解决方法?您所经历的是预期

我目前正在开发一个Ember.js应用程序,我在社交按钮方面遇到了巨大的麻烦。我已经在这里做了一些研究,但没有什么帮助

我的应用程序使用历史API,
og:
标记在页面转换时被正确更改,但Facebook仍然使用我的
index.html
页面中的初始值。调用
FB.XFBML.parse()
也没有帮助

此外,FB OpenGraph Debugger为任何页面显示我的
index.html
中的信息,因此,我甚至无法调试它的错误


那么,有没有人遇到过类似的情况,并且可能找到了合适的解决方法?

您所经历的是预期行为。Facebookscraper将检查您的URL并提取存在的
og
标记(如果有)

您的应用程序可能会动态更改页面内容(就像单页应用程序一样),但Facebookscraper不会运行任何JavaScript,因此它只会看到最初加载的
index.html
页面

你可以想象Facebook正在使用某种
cURL
wget
——无法(也不应该)解析/执行JavaScript或CSS的工具。scraper不在浏览器中运行-它不一定能看到与普通用户完全相同的东西


为了能够提供多个“喜欢”的插件,您的应用程序需要能够为每个“喜欢”的项目提供一个唯一的URL。这不必从前端访问,但必须通过Facebookscraper访问

我在过去的项目中所做的是为任何与Facebook相关的抓取(例如
share\u content.php
)创建一个唯一的URL,该页面将负责根据请求显示正确的
og
标记

例如:

 http://my-cool-site.com/share_content.php?item_id=5
share\u content
code将提取
item\u id
,并用包含item 5值的
og
标记填充HTML


由于您可能不希望普通用户能够访问专门为Facebook生成的页面,因此您可以尝试识别和识别Facebook的刮板,并仅向其显示内容-如果普通用户访问这些页面,您可以重定向到实际资源

有两种方法可以检测Facebook的刮刮器:

  • (不推荐)

@TwiStar-woah…嗯。。赞成。。。听起来它正是你所需要的。问题是您是否愿意为此维护另一台“服务器”?因为我唯一拥有的服务器是使用Yii框架编写的REST Api,服务器端渲染为零,我想设置另一台服务器可能比为facebook like and share插件编写20个视图要轻松得多。@TwiStar-我的意图是只编写一个接收参数的视图-但是如果您没有服务器端代码来处理这个问题,我想使用另一个解决方案也可以。