2012-06-03 60 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

相關問題