6

Facebook 指示我们将以下代码放在我们的页面上:

<div id="fb-root"></div>
<script>(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";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

而不是我将它包装在一个函数中:

function ReloadSocialSharing() {
    //facebook
    (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=myappid";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
}

并在里面调用它:$(function () { }

现在我的点赞按钮和我通过 Facebook 面板发表的评论都显示出来并且工作正常。然后我进行 AJAX 调用并将新的 html 元素拉入我的页面。这些已经有适当的 Facebook 标记,类似于我原来的字段。我像这样进行ajax调用:

$('#search').ajaxSubmit(GetSearchAjaxFormOptions(!isDefault, element));

function GetSearchAjaxFormOptions(displayResetPreferencesButton, giveMeFocus) {
    return {
        target: '#search-results',
        data: GetSearchData(),
        success: function () { RunAfterSearchResultsAreReturned(giveMeFocus) },
        error: function (error) {
            alert("Oops. There was an error.")
        }
    };
}

RunAfterSearchResultsAreReturned() {
   ........
   ReloadSocialSharing();
}

这一切都执行得很好,但是,通过 Ajax 调用添加的新社交共享元素没有连接并且不起作用。我错过了什么?

谢谢!

注意:我已经看到了使用 FB.XFBML.parse(); 的注释。但是,我试图避免 XFBML。

4

1 回答 1

4

您的尝试不起作用的(主要)原因是因为这一行:

if (d.getElementById(id)) return;

即代码检查 facebook 脚本(您使用包含的其余代码动态添加的)是否已经存在,如果存在,则不再包含它。我相信重复数据删除是有原因的,无论如何,我测试了重新运行代码(通过确保脚本被添加两次)没有成功。

我看到了您关于 XFBML 的注释,但是FB.XFBML.parse()即使您实际使用的标记是 HTML5,调用(不带任何参数)似乎也有效:

setTimeout(function() {
    $('<div class="fb-like" data-send="false" data-layout="standard"
        data-width="450" data-show-faces="false" data-colorscheme="light"
       data-action="like"></div>').appendTo('#test');
    FB.XFBML.parse();
}, 2000);

jsFiddle的工作示例。

于 2013-01-31T08:45:21.197 回答