2012-06-03 35 views
3

我想动态刷新一个fb:插件到我的页面。如何重新加载现有的Facebook像按钮而不重新创建它?

对于为例,到index.html的,我有:

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

(Facebook正在初始化,和所有完美的作品。)

然后,I'l喜欢动态地改变这个网址像按钮。 因此,使用jQuery,我做的:

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

而且它不工作...它只有在工作的时候删除的FB:(!完全相同的DOM),如标签,然后重新创建。

正如你可以在这里看到:Update FB:Like URL Dynamically using JavaScript, 描述的所有方法再现了FB:像标签...我需要刷新现有FB:像...不是重建。可能吗 ?

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

谢谢!

回答

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,我们认为只有在从插件到包含页面(因此为edge.create event)的一个方向上,我认为是可能的(对于fb sdk),需要进行跨域通信。

+0

感谢您给我们明确的答复! – jblary

0

你肯定可以做到这一点:

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

你认为这是一个“干净”的方法(在FB解析方法的情况下)? – jblary

+0

它和任何方法一样干净。 FB.XFBML.parse()只是将社交组件注入到您的网站的一种方式,但您可以自己添加一个类似按钮以及原始IFRAME代码,Facebook也支持该代码。这样你就不必加载他们的Javascript库。这将是正确的解决方案,也是实现您想要的唯一途径。 – Art

相关问题