我想动态刷新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/
谢谢!
答案 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) +"&");