多个Facebook评论实例

时间:2012-04-03 16:01:04

标签: jquery facebook comments facebook-javascript-sdk xfbml

每当用户使用JQuery执行某个操作时,我需要在页面上加载几个Facebook评论框。 (http://developers.facebook.com/docs/reference/plugins/comments/)

如果我要一次加载所有评论字段,我已经开始工作了,但这是糟糕的编程习惯。

当我尝试按顺序加载注释时,会显示第一条注释,但后续的注释都无法加载。

我已经创建了一个测试脚本来演示。

第1页:

<script src='http://code.jquery.com/jquery-1.6.4.min.js'></script>

  <div id='A' align='center' onclick='clickA();'><strong>AAAAAAAAAAAAAAAAAAAAA</strong></div>
  <div id='B' align='center' onclick='clickB();'><strong>BBBBBBBBBBBBBBBBBBBBB</strong></div>
  <div id='C' align='center' onclick='clickC();'><strong>CCCCCCCCCCCCCCCCCCCCC</strong></div>
  <div id='ALL' align='center' onclick='load_all();'><strong>Load ALL</strong></div>

<script>

var facebook_comments_page = 'http://localhost/test2.html';

function clickA(){ 
    $('#A').load( facebook_comments_page);
}

function clickB(){
    $('#B').load(facebook_comments_page);
}

function clickC(){
    $('#A').empty();//not working to remove the dom
    $('#A').detach();//not working to remove the dom
    $('#A').remove();//not working to remove the dom

    $('#C').load(facebook_comments_page );
}

function load_all(){  
  $('#A').load(facebook_comments_page);
  $('#B').load(facebook_comments_page);
  $('#C').load(facebook_comments_page);
}

</script>

第2页 - 实际的Facebook评论页面(test2.html):

<script class='fb-comments'>(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>


    <div class='fb-comments' data-href='http://example.com' data-num-posts='2' data-width='470' ></div>

在此示例中,如果您最初按AAAA,BBBB或CCCC,则会加载Facebook评论页面。但是如果你按下剩下的任何一个,它们就不会加载。但是,如果您首先选择Load ALL,则全部三个加载。

使用CCC,我认为如果破坏AAA的内容,那么CCC会加载。但事实并非如此。我认为JQuery会在后续调用中杀死脚本内容。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

Chris,我个人在可能的情况下避免使用jQuery。这是一个独立的示例,它将与您的行为相同,并使用jQuery。

  1. javascript sdk异步加载,完成并初始化后,将向每个div绘制一个按钮以加载该注释框。
  2. 按下按钮会将html5 div加载到div中,xfbml将解析。

  3.     <div id="fb-root"></div>
        <div id="cA"></div>
        <div id="cB"></div>
        <div id="cC"></div>
        <div id="cAll"></div>
        <script>
              window.fbAsyncInit = function() {
                FB.init({
            appId  : 'App_ID_HERE',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true, // parse XFBML
            //channelUrl : 'https://anotherfeed.com/emo/channel.html', // channel.html file
            oauth  : true // enable OAuth 2.0
                });
    document.getElementById('cA').innerHTML='<button onclick="commentA();">Load A</button>';
    document.getElementById('cB').innerHTML='<button onclick="commentB();">Load B</button>';
    document.getElementById('cC').innerHTML='<button onclick="commentC();">Load C</button>';
    document.getElementById('cAll').innerHTML='<button onclick="commentA();commentB();commentC();">Load All</button>';
          // Load the SDK Asynchronously
        (function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) return;
          js = d.createElement(s); js.id = id;
          // Add your application id where says App_ID_HERE
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=App_ID_HERE";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    
        function commentA(){
        var cb=document.getElementById('cA');
       cb.innerHTML='<div class=\'fb-comments\' data-href=\'http://example.com?page=1\' data-num-posts=\'2\' data-width=\'470\'></div>';
        FB.XFBML.parse(cb);
        };
        function commentB(){
        var cb=document.getElementById('cB');
        cb.innerHTML='<div class=\'fb-comments\' data-href=\'http://example.com?page=2\' data-num-posts=\'2\' data-width=\'470\'></div>';
        FB.XFBML.parse(cb);
        };
        function commentC(){
        var cb=document.getElementById('cC');
        cb.innerHTML='<div class=\'fb-comments\' data-href=\'http://example.com?page=3\' data-num-posts=\'2\' data-width=\'470\'></div>';
        FB.XFBML.parse(cb);
        };
        </script>