如何在不重新创建的情况下重新加载现有的facebook按钮?

时间:2012-06-03 19:09:51

标签: 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:就像...不重新创建它。有可能吗?

编辑:这是测试的小提琴:-):http://jsfiddle.net/nRTkS/

谢谢!

2 个答案:

答案 0 :(得分:0)

不,我不认为这是可能的 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)。

答案 1 :(得分:0)

你当然可以做到这一点:

var iframe = $("iframe", "#fbtest");
iframe[0].src = iframe[0].src.replace(/&href=(.*?)&/, "&href=" + encodeURIComponent(url) +"&");