我正在开发一个Ember.js应用程序,我在使用社交按钮方面遇到了很多麻烦。我已经在这里做了一些研究,但它没有什么帮助。
我的应用程序使用历史记录API,og:
标记在页面转换时正确更改,但Facebook仍使用我的index.html
页面中的初始值。拨打FB.XFBML.parse()
也无济于事。
另外,FB OpenGraph Debugger会显示我index.html
的任何页面的信息,因此我甚至无法调试它的错误。
那么,有没有人遇到这样的事情,并且可能找到了合适的解决方法?
答案 0 :(得分:1)
您遇到的是预期的行为。 Facebook剪贴簿将检查您的网址并提取存在的og
标记(如果有)。
您的应用程序可能会动态更改页面内容(与单页应用程序一样),但Facebook剪贴板不会运行任何JavaScript,因此它只会看到最初加载的index.html
页面。 / p>
你可以想象Facebook正在使用某种cURL
或wget
- 不能(也不应该)解析/执行JavaScript或CSS的工具。剪贴板不会在浏览器中运行 - 它不一定会看到普通用户完全相同的东西。
为了能够提供多个“喜欢”插件,您的应用程序需要能够为每个“可爱”项目提供唯一的URL。这不必从您的前端访问,但它必须由Facebook刮板访问。
我在过去的项目中所做的是为任何与Facebook相关的报废创建一个唯一的网址(例如share_content.php
),此页面将负责按要求显示正确的og
标记。< / p>
例如:
http://my-cool-site.com/share_content.php?item_id=5
share_content
代码将提取item_id
并使用包含第5项值的og
标记填充HTML。
由于您可能不希望普通用户能够访问专门为Facebook生成的页面,因此您可以尝试识别并识别Facebook的剪贴板并仅向其显示内容 - 如果普通用户访问这些页面,您可以执行重定向到实际资源。
有几种方法可以检测Facebook的剪贴板: