scr*_*pii 5 javascript php facebook meta-tags fragment-identifier
我在这里陷入了两难境地,并希望得到社区的一些建议.这是我的问题:
我创建了一个包含大量动态内容的网站,所有内容都通过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'].'" />';
Run Code Online (Sandbox Code Playgroud)
您的第一个想法可能是:为什么不使用GET请求或查询字符串?即:
http://www.mysite.com/home?id=123
但是这种方法的问题在于Javascript无法动态更改URL的这一部分,它只能更改片段标识符.这意味着我们文章的所有直接链接都需要刷新页面.这违背了我们的整个'动态'方法 - 我可能会添加它真的很好:)
所以我现在很难过.我能想到的唯一半解决方案是使用两种方法:
在类似fb的请求中使用get参数,对于直接链接使用片段标识符.
但这会带来以下问题:
对不起,文字墙!感谢您提供的任何输入.
编辑:我刚刚测试了我提出的解决方案涉及两者的组合,我可以确认Facebook遵循重定向,所以这个解决方案根本不起作用.这令人沮丧!
编辑编辑:实现我的"混合"想法的一种可能方法是使用window.location重定向而不是PHP header()调用重定向,因此Facebook从原始页面获取元标记,对于那些有类似问题的人.
谢谢.
PHP 的parse_url函数返回包括哈希片段在内的所有内容,因此您可以使用parse_url和访问fragment返回数组的键
$url = 'http://www.mysite.com/home#/123';
$parts = parse_url($url);
$fragment = $parts['fragment']; // => '/123'
Run Code Online (Sandbox Code Playgroud)
或者传入componentflag PHP_URL_FRAGMENT,然后检索片段本身
$fragment = parse_url($url, PHP_URL_FRAGMENT); // => '/123'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |