让Facebook喜欢Box代码再次触发更改href

时间:2013-07-07 06:59:33

标签: jquery facebook facebook-likebox

不知怎的,我怀疑这很简单,但我只是以错误的方式看待它。

我正在动态地将href的页面名称部分加载到FB类似框HTML5代码中。这是通过单击按钮('fbtn)触发的 - 每个按钮都附加了不同的页面名称(按钮和页面名称也是动态创建的)。这样可以正常工作:a)页面名称被传递给函数; b)第一次,FB代码正确触发并生成显示。当我关闭显示Like框的div并单击第二个按钮(或同一个按钮)时,传递变量(页面名称),但似乎FB代码没有被触发 - 所以,div显示,但没有任何内容。

FB代码包含在此函数中,以防止它在页面加载时自动运行(当尚未创建按钮和页面名称时)。

是否有某种方法可以重新设置整个函数,以便在单击“关闭”(如下所示)时,变量函数返回到第一次单击之前的状态(即等待传递变量页面名称)并运行FB代码)?

感谢您的任何建议。

$('#classOne').on('click','.fbtn', function() {
   fbid = this.value;
      if (!fbid) {
        fbid = 'Boo'};
        alert('' + fbid + '');
  (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=XXXXXXXXXXXXXXX";
  fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
   $('#fbLike').html('<div id =closeFB>Close</div><div id=fb-root></div><fb:like-box     href=https://www.facebook.com/' + fbid + ' width=900 height=500 show_faces=true stream=true show_border=true header=true></fb:like-box>');
   $('#closeFB').stop().animate({height:'20'},50);
   $('#fbLike').stop().animate({height:'500'},500);
   $('#closeFB').click(function() {
   $('#fbLike').html('').stop().animate({height:'0'},500);
   $('#closeFB').stop().animate({height:'0'},50);
});
});

2 个答案:

答案 0 :(得分:0)

问题是,如果代码在文档中找到标识为facebook-jssdk的脚本,则代码将不会执行任何操作,因此从技术上讲,它只能运行一次,为每个脚本提供不同的ID或删除现有脚本在添加新脚本之前,要执行此替换

if (d.getElementById(id)) return;

var currentScript = d.getElementById(id);
if (currentScript){
    currentScript.parentNode.removeChild(currentScript);
}

答案 1 :(得分:0)

嗯,至少有一种解决方案是使用FB iframe代码。动态更改iframe src中的href工作正常,Like Box每次都会使用不同的src重新加载,具体取决于单击的按钮。虽然这解决了这个问题,但如果有人有一个javascript解决方案,我仍然会对它感兴趣,如果仅用于教育目的。谢谢!