facebook - 如何重新加载现有的 facebook 之类的按钮而不重新创建它?

标签 facebook xfbml

我想在我的页面中动态刷新一个 fb:like 插件。

例如,在 index.html 中,我有:

<fb:like id="fbtest" href="http://www.urltest.com" send="true" width="450" show_faces="true"></fb:like>

(Facebook 已初始化,一切正常。)

然后,我想动态更改此赞按钮的 URL。 所以,对于 jQuery,我这样做:

$('#fbtest').attr('href', 'http://www.urltest2.com').empty().off().removeData();
FB.XFBML.parse();

它不起作用...只有当我删除 fb:like 标签并重新创建它时它才起作用(完全相同的 DOM!)。

如您所见:Update FB:Like URL Dynamically using JavaScript , 描述的所有方法都会重新创建 fb:like 标签...我需要刷新现有的 fb:like...而不是重新创建它。可能吗?

编辑:这是一个用于测试的 fiddle :-):http://jsfiddle.net/nRTkS/

谢谢!

最佳答案

不,我不认为这是可能的。
FB.XFBML.parse 方法,顾名思义,只是解析:

This function parses and renders XFBML markup in a document on the fly

一旦一个插件已经被渲染,它就不会被重新渲染,否则行为可能会有点奇怪,例如你在同一页面上有多个插件,你改变了一个类似插件的 url 属性然后调用 FB.XFBML.parse,它将重新呈现整个文档和其中的插件。

所以是的,您可以确保在将元素传递给方法时调用该方法,或者 sdk 可以只为每个插件维护一个状态,只有在状态发生变化时才重新呈现,但所有这些都更重要复杂然后只需从 dom 中删除插件,输入新的 fb:like 标记,然后调用 FB.XFBML.parse

现在,我认为这是真正的原因,但这只是一个猜测。
SDK 在包含实际插件的插件容器内创建一个 iftame。
为了更改类似操作的 url,需要进行跨域通信,我认为(对于 fb sdk)仅在从插件到包含页面的一个方向上是可能的(因此 edge.create event)。

关于facebook - 如何重新加载现有的 facebook 之类的按钮而不重新创建它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873117/

相关文章:

facebook - 获取 facebook 公共(public)页面评级和评论

ios - 在iOS中从新的Facebook SDK 4中获取用户个人资料图片

php - Facebook 应用程序生成器

php - 当不直接使用 OAuth 对话框时,如何从我的服务器 facebook api 调整 facebook 登录的显示?

javascript - 更新 FB :Like URL Dynamically using JavaScript

facebook - 插入 fb :comments with javascript

jquery - 滑动以显示 div 上溢出的更多内容

php - 在哪里放置 FB.Event.subscribe

jquery - 使用 Ajax/jQuery 动态加载内容时无法加载 Facebook 评论

javascript - 渲染 EmberJS View 时如何解析 XFBML 标签?