不知怎的,我怀疑这很简单,但我只是以错误的方式看待它。
我正在动态地将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);
});
});
答案 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解决方案,我仍然会对它感兴趣,如果仅用于教育目的。谢谢!