我试图在我的网络应用中分享Facebook上的链接。我已经初始化了SDK等,以下代码工作正常:
callToMyAPI()
.then(function(response) {
FB.ui({
method: "share",
href: "http://www.google.com",
}, function(response) {
console.log(response);
});
});
这会弹出一个Facebook共享对话框,其中包含指向http://www.google.com的链接和一些嵌入式预览(底部的框显示URL中的图像,以及页面中的标题和说明/摘录) 。当我点击"发布到Facebook"对话框中的按钮,然后切换到Facebook,我看到带有共享链接的帖子。
但是我需要使用从我的API返回的值动态设置href
参数。所以我这样做了:
callToMyAPI()
.then(function(response) {
var url = response; // http://www.google.com
FB.ui({
method: "share",
href: url,
}, function(response) {
console.log(response);
});
});
基本上,我所做的就是用变量"http://www.google.com"
替换硬编码的url
(其值为响应,即http://www.google.com
)。其他一切都完全一样。但是当我这样做时,会发生什么:
Facebook分享对话框仍然会打开,但它缺少我试图分享的网址的嵌入式预览
当我点击"发布到Facebook"按钮,对话框关闭,但没有任何内容发布到Facebook。并且记录的响应只是一个空数组([]
)
因此,使用我的API的响应作为href
值会让人感到窒息,但我不明白为什么。我该如何解决这个问题?
更新:经过多次反复试验,我发现了这种奇怪的行为......
如果我使用http://dev.example.com
作为href
值(其中example.com实际上是我的真实域名),我就无法在“共享”对话框中获得预览,并且没有任何内容发布到Facebook :
FB.ui({
method: "share",
href: "http://dev.example.com"
});
但如果我使用http://www.example.com
(请注意www
)作为href
值(再次,example.com实际上是我的真实域名),我仍然不会在“共享”对话框中进行预览,但帖子 通过:
FB.ui({
method: "share",
href: "http://www.example.com"
});
但是,由于“共享”对话框中仍然没有预览,因此它实际上并未将链接附加到邮件。所以在Facebook上,我得到的是一篇帖子,上面写着我写的任何评论,但没有http://www.example.com
的嵌入式链接。
答案 0 :(得分:3)
真正的答案是三方面的:
我的http://dev.example.com
网站需要身份验证;我完全忘了这个,因为我保存了用户名/密码,因此它从不提示我
我的http://www.example.com
实际上是一个较长的网址(http://www.example.com/test/12345
),它没有指向该服务器上的现有网页(它只存在于我的开发服务器上)。因此,Facebook可以访问该网址(无需身份验证),但无法从中获取任何内容,因此,为什么帖子会通过,但没有嵌入式预览
我分享的页面缺少各种Open Graph元标记(og:type
等);显然href
是您可以通过共享方法传递的唯一参数,而共享所需的所有其他内容必须来自页面上的OG标记
所以我在页面上添加了缺少的OG标签(og:url
除外),在我的开发服务器上禁用了auth(暂时用于测试),现在最后帖子正在通过附加正确的链接。< / p>
答案 1 :(得分:1)
我现在使用feed
方法代替share
方法解决了这个问题,如this answer中所述:
callToMyAPI()
.then(function(response){
var url = response;
FB.ui({
method: "feed",
link: url,
}, function(response) {
console.log(response);
});
});
语法与share
方法完全相同,只有参数名称为link
而不是href
,并且工作正常。这证实了我的回答确实是一个字符串,所以我真的不明白为什么share
不会以相同的方式工作。
唯一的问题是,feed
方法是deprecated,并且将于2015年4月30日停止工作。所以我仍然希望找到一种方法来使用较新的share
方法。
答案 2 :(得分:1)
我遇到了同样的问题,我通过在我必须分享的网址末尾添加一个随机GET参数来解决它。
例如:
var url = window.location;
url = url+"?randomParameter=randomValue"
FB.ui({ method:'share', href: url }, function(response){});