我在这里遇到了很大的困境,希望社区提供一些建议。这是我的问题:
我创建了一个包含大量动态内容的网站,所有内容都通过 AJAX 拉取并通过 JS 显示。我目前允许直接链接到我的内容的方式是使用 JS 动态修改片段标识符,这是一个示例:
http://www.mysite.com/home#/123
其中 123 是内容的 ID。当内容关闭时,它会再次剥离片段标识符。
这非常有效,当人们加载页面时,我的 AJAX 请求成功地请求了“123”文章。但我刚刚在所有文章上实现了一个 Facebook 点赞按钮,现在我遇到了障碍。
基本上,Facebook 找到与您的“喜欢”内容相关联的缩略图、标题和 URL 的方式是检查传递到 fb 的 URL 的元标记,如 iframe。它通过在 URL 上执行 GET 请求、检查元标记的内容,然后在 Facebook 上显示这些内容来做到这一点。
问题是片段标识符没有传递给服务器,所以我无法在 PHP(据我所知)中使用特定请求文章中的内容动态生成这些元标记。
例如,我希望能够做这样的事情:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
您的第一个想法可能是:为什么不使用 GET 请求或查询字符串?IE:
http://www.mysite.com/home?id=123
然而,这种方法的问题在于 Javascript 无法动态更改 URL 的这一部分,它只能更改片段标识符。这意味着所有指向我们文章的直接链接都需要刷新页面。这与我们采用的整个“动态”方法背道而驰——我可能会补充说这真的很好:)
所以我现在有点难过。我能想到的唯一半解决方案是同时使用两种方法:
在 fb like 请求中使用 get 参数,对于直接链接使用片段标识符。
但这会带来以下问题:
- 如果用户将直接链接粘贴到 Facebook 上,它将包含片段标识符,并且正确的元数据不会显示在 Facebook 上。
- 我需要做一些奇怪的重定向魔术来修复 URL 的格式以删除 ID(即检测是否传入了 GET 参数并重定向到等效的片段标识符)。但我不知道 FB 是否也会遵循重定向并从重定向页面而不是第一页获取元标记,这实际上会使这个解决方案无论如何都没用。
对不起文字墙!感谢您提供的任何意见。
编辑:我刚刚测试了我提出的涉及两者组合的解决方案,我可以确认 Facebook 遵循重定向,所以这个解决方案根本不起作用。这很令人沮丧!
编辑编辑:实现我的“混合”想法的一种可能方法是使用 window.location 重定向而不是 PHP header() 调用重定向,因此 Facebook 从原始页面获取元标记,对于那些有类似问题的人.
谢谢。