我有一个页面,用户必须在多个对象上启动操作,但Facebook设计限制您使用所需的元属性标记每页只有一个对象。
有没有人找到解决这个问题的方法?
答案 0 :(得分:12)
Open Graph使用URL作为对象标识符,因此不可能在一个页面上有多个对象,页面是对象。
相反,您需要每个对象的URL,并且该URL的HTML应包含正确的OG标记。
您可以在一个页面上放置多个相似按钮,并通过为每个相似按钮指定'href'参数使它们指向每个对象。
但是,如果您希望用户在点击每个对象的链接时最终返回到SAME页面,您可以这样做,但它有点棘手...
在您的对象页面上,在您的服务器上,查看传入的请求useragent。如果useragent包含字符串'facebookexternalhit'然后呈现HTML和OG标记 - 这就是Facebook刮刀看到您的页面的方式。如果useragent不包含此字符串,请对您希望用户查看的页面执行302 redirct。
结果?许多对象,但只有一个用户可见的页面。取胜。
这就是你要做的事情:
<?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...
答案 1 :(得分:2)
https://stackoverflow.com/a/7659770/1354666这是一个很好的答案,但有些事情对我来说效果不佳,所以我尝试了另一种选择。
我没有在按钮标签中使用href,而是使用了iframe。
我仍在努力为我的手机输出改进这个功能,但它对大多数浏览器都有效。
答案 2 :(得分:0)
FB使用您分配给对象的URL来获取信息。解决这个问题的唯一方法是通过iframe或类似的方法显示对象。如果直接引用了对象,则需要一种方法来重定向回组合对象视图的相应包装页面。只要所有内容都在同一个域中,您就可以找到一种通过父级在子帧之间进行通信的方法。