【发布时间】:2013-01-12 10:19:28
【问题描述】:
我有一个页面,用户必须在其中启动对多个对象的操作,但 Facebook 的设计使用所需的元属性标签将您限制为每个页面只有一个对象。
有没有人找到解决这个问题的方法?
【问题讨论】:
标签: facebook facebook-opengraph
我有一个页面,用户必须在其中启动对多个对象的操作,但 Facebook 的设计使用所需的元属性标签将您限制为每个页面只有一个对象。
有没有人找到解决这个问题的方法?
【问题讨论】:
标签: facebook facebook-opengraph
Open Graph 使用 URL 作为对象标识符,因此一个页面上不可能有多个对象,页面 是对象。
相反,您需要为每个对象创建一个 URL,并且该 URL 的 HTML 应该包含正确的 OG 标记。
您可以在一页上放置多个赞按钮,并通过为每个赞按钮指定“href”参数使它们指向您的每个对象。
但是,如果您希望用户在单击每个对象的链接时最终回到相同的页面,您可以这样做,但有点棘手...
在您的对象页面上,在您的服务器上,查看传入的请求用户代理。如果 useragent 包含字符串 'facebookexternalhit' 然后呈现 HTML 和 OG 标记 - 这就是 Facebook 抓取工具看到您的页面的方式。如果用户代理不包含此字符串,请执行 302 重定向到您希望用户看到的页面。
结果?许多对象,但只有一个用户可见页面。赢了。
你会这样做:
<?php
if ($_SERVER["HTTP_USER_AGENT"] != "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)") {
redirect('http://www.somesite.com', 302);
}
function redirect($url, $type=302) {
if ($type == 301) header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
die();
}
?>
<html...
【讨论】:
https://stackoverflow.com/a/7659770/1354666这是一个很好的答案,但它的一些事情对我来说效果不佳,所以我尝试了一个替代方案。
我使用的是 Iframe,而不是在按钮标签中使用 href。
我仍在努力为我的手机输出优化此功能,但它在大多数浏览器中都可以正常工作。
【讨论】:
FB 使用您分配给对象的 URL 来抓取它以获取信息。解决这个问题的唯一方法是通过 iframe 或类似的方法显示对象。如果对象被直接引用,您需要一种方法来重定向回组合对象视图的适当包装器页面。只要一切都在同一个域中,您就可以制定一种通过父框架在子框架之间进行通信的方法。
【讨论】: