2011-05-19 54 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