我想在我的页面中动态刷新一个 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/