【发布时间】:2014-11-20 15:28:24
【问题描述】:
我正在尝试通过我的网络应用程序在 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 分享对话框仍然打开,但它缺少我尝试分享的 URL 的嵌入式预览
当我单击“发布到 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 的嵌入式链接。
【问题讨论】:
-
你试过简单的
href: response吗? -
是的,我实际上是先这样做的,但没有区别。我只是使用了
url变量来更清楚地表明这是我的 API 的响应,而不是 Facebook 的响应。 -
写
var url = 'http://www.google.com';有用吗?如果是,则可能是response变量是一个对象而不是字符串。 -
是的,但我的回复也是一个字符串。这个问题描述了一个类似的问题:stackoverflow.com/questions/25440700/…
标签: jquery facebook url facebook-javascript-sdk href