2011-05-19 77 views
2

我有一個使用Facebook小部件的小網站應用程序。此頁面還使用querrystrings動態加載內容。我需要分配給Facebook小部件的href根據querrystring動態確定。下面是我如何定義窗口小部件的例子:動態設置Facebook小部件的href

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=186609524720286&amp;xfbml=1"></script> 
<fb:like id="fbLike" href="http://apps.facebook.com/inflatableicons/image_preview.html" send="true" width="450" show_faces="true" font=""> 
</fb:like> 

但我真正需要的是這樣的:?

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=186609524720286&amp;xfbml=1"></script> 
<fb:like id="fbLike" href="http://apps.facebook.com/inflatableicons/image_preview.html?y=119" send="true" width="450" show_faces="true" font=""> 
</fb:like> 

注意HREF在第二個例子是結尾Y = 119,但第一個不是。我的問題是,我不知道哪個值作爲widget的querrystring,直到我看到哪個querrystring被傳遞給html頁面。任何人都可以解釋我可以如何在href中插入一個動態值?我第一次嘗試其實這樣以後就設置在href:

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=186609524720286&amp;xfbml=1"></script> 
<fb:like id="fbLike" href="#" send="true" width="450" show_faces="true" font=""> 
</fb:like> 
<script> 
    var url = 'http://apps.facebook.com/inflatableicons/image_preview.html?y=120'; 
    document.getElementById('fbLike').setAttribute('href', url); 
    console.log(document.getElementById('fbLike')); 
</script> 

,但是當我這樣做的小部件抱怨HREF沒有設置,奇怪的是當我打印的getElementById的價值充分顯示了我設定的HREF與setAttrbibute,即使小部件不認爲它設置正確,並給出錯誤。我相信由於某種原因,小部件將不允許我在事後設置href。

編輯:

我使用ferni在他的回答descried jQuery的例子也試過但這似乎並沒有工作:

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=186609524720286&amp;xfbml=1"></script> 
<fb:like id="fbLike" href="#" send="true" width="450" show_faces="true" font=""> 
</fb:like> 
<script> 
    var url = 'http://apps.facebook.com/inflatableicons/image_preview.html?y=120'; 
    jQuery("#fblikeblock").html('<fb:like id="fbLike" href="'+url+'" send="true" width="450" show_faces="true" font=""></fb:like>'); 
    FB.XFBML.parse(document.getElementById('fblikeblock')); 
    console.log(document.getElementById('fblikeblock')); 
    </script> 

我加入的console.log到年底腳本打印fblikeblock的值並返回null,因此這可能是問題的一部分。

回答

3

您需要將fb:如按鈕添加到頁面,然後調用其上的XFBML處理器。因此,像這樣(我假設jQuery是使用的庫:你必須,如果你正在使用別的東西來改變它):

var url = "http://apps.facebook.com/inflatableicons/image_preview.html?y=119"; 
jQuery("#fblikeblock").html('<fb:like id="fbLike" href="'+url+'" send="true" width="450" show_faces="true" font=""></fb:like>'); 
FB.XFBML.parse(document.getElementById('fblikeblock')); 

編輯:潛在實施這一解決方案會是這樣。

<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=186609524720286&amp;xfbml=1"></script> 
<div id="fblikeblock"></div> 
<script> 
    var url = 'http://apps.facebook.com/inflatableicons/image_preview.html?y=120'; 
    jQuery("#fblikeblock").html('<fb:like id="fbLike" href="'+url+'" send="true" width="450" show_faces="true" font=""></fb:like>'); 
    FB.XFBML.parse(document.getElementById('fblikeblock')); 
    console.log(document.getElementById('fblikeblock')); 
    </script> 
+0

感謝您的答覆,我試圖用你的jquerry腳本,但按鈕依然抱怨沒有HREF當我使用我貼在我的最後一次編輯代碼。 – Mike2012 2011-05-19 19:32:17

+0

看我的編輯,讓我知道如果這對你有用。 – Femi 2011-05-19 19:47:53

+0

太棒了,完美的工作,非常感謝你Ferni! – Mike2012 2011-05-19 20:04:50