54

可能重复:
Facebook Sharer 如何选择图片?

我正在制作一个 Flash 应用程序,演示以不同速度驾驶时可能造成的交通伤害。我希望用户能够在 facebook 上分享这些信息。然而,这要求我可以以某种方式自定义将出现在 facebook 上的文本。

我正在制作一个在空白窗口中打开的网址(来自 Flash 应用程序本身)。我指定了 u 和 t 参数,将生成的消息作为 t 参数。但这似乎总是被页面标题覆盖。如果我从 html 代码中省略标题标签,则使用文件名(也覆盖指定的标题)。

http://www.facebook.com/sharer.php?u=http://espentokerud.com/face/addiste.html&t=test;

我也尝试对 url 进行 url 编码,但无济于事。

http://www.facebook.com/sharer.php?u=http%3a%2f%2fespentokerud.com%2fface%2faddiste.html&t=test;

我也尝试使用 addthis API,但也遇到了同样的缺点。有趣的是,如果我发布一个swf,可以自定义标题和描述,还可以指定截图。但如果我不发布 swf,这似乎被忽略了。

我知道我可以在 html 页面上使用元标记来指定缩略图、标题和描述,但其中一些内容必须基于 flash 应用程序内的计算。

4

6 回答 6

66

2016 更新

使用共享调试器找出您的问题所在。

确保您遵循 Facebook分享最佳实践

确保您正确使用Open Graph Markup

原始答案

我同意这里已经说过的话,但是根据 Facebook 开发者网站上的文档,您可能想要使用以下元标记。

<meta property="og:title" content="title" />
<meta property="og:description" content="description" />
<meta property="og:image" content="thumbnail_image" />

如果您无法使用元标记实现您的目标并且您需要一个 URL 嵌入版本,请参阅下面的 @Lelis718 的答案

于 2010-10-04T20:40:15.390 回答
29

我认为该站点有解决方案,我现在将对其进行测试。似乎 facebook 更改了 share.php 的参数,因此,为了自定义共享窗口文本和图像,您必须将参数放在“p”数组中。

http://www.daddydesign.com/wordpress/how-to-create-a-custom-facebook-share-button-for-your-iframe-tab/

一探究竟。

于 2011-09-08T15:11:10.117 回答
4

一周前我遇到了同样的问题。

首先,我注意到您的 URL 在参数字符串之前有一个 & 符号,但它可能需要有一个问号来代替参数字符串,然后在每个附加参数之间加上一个 & 符号。

现在,您确实需要转义您的 URL,但还需要对您传递给 URL 的 URL 参数(标题或您需要在共享中提供内容的其他内容)进行双重转义,如下所示:

var myParams = 't=' + escape('Some title here.') + '&id=' + escape('some content ID or any other value I want to load');
var fooBar = 'http://www.facebook.com/share.php?u=' + escape('http://foobar.com/superDuperSharingPage.php?' + myParams);

现在,您需要创建上面链接的 superDuperSharingPage.php,它应该提供您想要的动态标题、描述和图像内容。像这样的东西就足够了:

<?php
    // get our URL query parameters
    $title = $_GET['t'];
    $id = $_GET['id'];
    // maybe we want to load some content with the id I'll pretend we loaded a
    // description from some database in the sky which is magically arranged thusly:
    $desciption = $databaseInTheSky[$id]['description'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title><?php echo $title;?></title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="title" content="<?php echo $title;?>" />
  <meta name="description" content="<?php echo $desciption;?>" />
  <!-- the following line redirects to wherever we want the USER to land -->
  <!-- Facebook won't follow it. you may or may not actually want || need this. -->
  <meta http-equiv="refresh" content="1;URL=http://foobar.com" />
</head>
<body>
  <p><?php echo $desciption;?></p>
  <p><img src="image_a_<?php echo $id;?>.jpg" alt="Alt tags are always a good idea." /></p>
  <p><img src="image_b_<?php echo $id;?>.jpg" alt="Make the web more accessible to the blind!" /></p>
</body>
</html>

让我知道这是否对您有用,这基本上对我有用:)

于 2010-10-04T02:06:02.117 回答
2

我其实也有类似的问题。我有一个带有多个单选按钮的页面;每个按钮都会在更改时通过 JavaScript 设置页面的标题和描述元标记。

例如,如果用户选择第一个按钮,元标记会说:

<meta name="title" content="First Title">
<meta name="description" content="First Description">

如果用户选择第二个按钮,这会将元标记更改为:

<meta name="title" content="Second Title">
<meta name="description" content="Second Description">

... 等等。我已经通过 Firebug 确认代码工作正常(即我可以看到这两个标签已正确更改)。

显然,Facebook Share仅提取页面加载时可用的标题和描述元标记。页面加载后对这两个标签的更改被完全忽略。

有人对如何解决这个问题有任何想法吗?也就是说,强制 Facebook 获取页面加载后更改的最新值。

于 2010-04-17T00:28:02.750 回答
2

我有一个显示东西的 Joomla 模块......我希望能够在 facebook 上分享这些东西,而不是页面的标题元描述......所以我的解决方法是在服务器上有一个秘密的 .php 文件被执行当它检测到FB的

$_SERVER['HTTP_USER_AGENT']

if($_SERVER['HTTP_USER_AGENT'] != 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)') {
    echo 'Direct Access';
} else {
    echo 'FB Accessed';
}

并使用 URL 传递变量,该 URL 使用我想从我的 joomla 模块共享的项目的标题和元描述格式化该特定页面...

一个name="fb_share" share_url="MYURL/sharer.php?title=TITLE&desc=DESC"

希望这可以帮助...

于 2010-12-12T10:35:35.817 回答
0

你不能,它只是不支持它。

我不得不问,为什么这些计算只需要在 Flash 应用程序内部进行?

您必须导航到一个与您从 Flash 应用程序获得的元数据明显相关的 URL。否则,Flash 应用程序如何知道根据您点击的 URL 获取值。

选项是:

  • 在页面上计算:提供页面时,您需要在服务器上进行相同的计算并在页面元数据上发送标题等。
  • 将查询字符串中的元数据发送到您的站点:如果您确实必须将计算保持在服务器之外,另一种技巧是在用户单击以从 Facebook 访问您的站点的 URL 中显式设置元数据。处理页面时,您只需将其复制回元数据部分(不要忘记适当编码)。由于 url 大小的限制,这显然是有限的。
  • 将查询字符串中的计算结果发送到您的站点:如果这些计算只是为您提供了元数据中使用的几个数字,您可以在用户点击返回您站点的 URL 的查询字符串中包含这些数字。这更有可能不会给您带来 URL 大小的问题。

回覆

为什么这被赞成?这是错的。您可以 - 支持将自定义标题、描述和图像添加到您的共享中。我一直都这样做。– Dustin Fineout 3 小时前

OP 非常清楚地表示,他已经知道您可以从页面提供该服务,但希望将值直接传递给 facebook(而不是通过目标页面)。

此外,请注意,我提供了 3 种不同的选项来解决此问题,其中之一是您稍后发布的答案。您的选择不是 OP 试图这样做的方式,它只是一种解决方法,因为 facebook 的限制。

最后,正如我所做的那样,您应该提到特定的解决方案是有缺陷的,因为您可以轻松地达到 URL 大小限制。

于 2010-10-03T20:58:03.420 回答