2012-06-03 1 views
3

Я бы хотел обновить динамически fb: как плагин на моей странице.Как перезагрузить существующую фейсбуку, как кнопка, не обновляя ее?

Для Exemple, в index.html, у меня есть:

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

(Facebook инициализируется, и все работает отлично.)

Затем I'l нравится динамически изменять URL этого как кнопка. Так, с JQuery, я:

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

И это не работает ... Она работает только тогда, когда я удалить ГФ: (! Точно так же DOM), как тег, и создать его заново.

Как вы можете увидеть здесь: Update FB:Like URL Dynamically using JavaScript, Все описанные воссоздает FB: как тег ... Мне нужно обновления существующий FB: как ... не воссоздавать его. Является ли это возможным ?

EDIT: Вот скрипка для тестирования :-): 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-адрес для подобного действия, вам потребуется перекрестная доменная связь, которая, по моему мнению, возможна (для fb sdk) только в одном направлении, которое находится от плагина до содержащей страницы (отсюда edge.create event).

+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