- 締切済み
FacebookのCommentsについて
Facebookのapi(JavaScript)にてFacebookページのウォールを取得し、各投稿ごとに動的にIDを付加したCommentsプラグインを表示したいと思っています。 下記要領で実行すると、htmlは正しく挿入されている(Firebugにて確認)のですが、Commentsが読み込まれません。 同じファイル内でgetWall関数外に静的にHTMLを記述するとCommentsは表示されます。 どうすれば動的に識別子を付加したCommentsを表示させることができますでしょうか? <!-- SDK読み込み --> <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/ja_JP/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <script> function getWall() { FB.api( '/ -- ID -- /feed', { access_token: ' -- 取得したアクセストークン -- ' }, function(response) { // 取得後のコールバック var contents = ''; for (var i = 0; i < response.data.length; i++) { if(response.data[i]['message']){ contents += "<div class='topic_block' id='topic_" + response.data[i]['id'] + "'\>"; contents += response.data[i]['message']; contents += "</div>"; contents += "<div class='fb-comments' data-href=' -- パーマリンク等、投稿毎の識別子 -- ' data-num-posts='10' data-width='470'></div>"; contents += "</div>"; */ } } // ウォールの内容を表示させる document.getElementById('topics').innerHTML = contents; }); } window.fbAsyncInit = function() { getWall(); }; </script> <div id='topics'></div>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
api自体を知らないので、内容はわかりませんが、 とりあえず、後半のスクリプトで 1)「( )」、「{ }」の対応関係がおかしい(数が合わない) 2)「*/」が単独で存在する 3)「内容表示部分」が(多分)コールバックの外側にある あたりが、おかしくないですか?
お礼
contents += "<div class='fb-comments' data-href=' --識別子-- ' data-num-posts='10' data-width='470'></div>"; の後で FB.initする事で解決しました。 ありがとうございました。
補足
回答ありがとうございます。 表示幅の関係で括弧の対応関係がわかりにくいみたいですね。 こちら http://qa.itmedia.co.jp/qa7480902.html で見るとわかりやすいかもしれません。 */はこちらにコピーする為に無駄なものをカットした際の消し忘れでした。 下に修正バージョンを貼付けます。 内容表示部がコールバックの内にあることを確認して頂けると思います。 これで一応、ウォールの取得はできています。 このままapiでコメント書き込みまでできれば良いのですが、どうやらできるのは記事の投稿までのようですので、commentsプラグインで対応しようとしている次第です。 <!-- SDK読み込み --> <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/ja_JP/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <script> function getWall() { FB.api('/ -- ID -- /feed',{ access_token: ' -- 取得したアクセストークン -- ' }, function(response) { // 取得後のコールバック var contents = ''; for (var i = 0; i < response.data.length; i++) { if(response.data[i]['message']){ contents += "<div class='topic_block' id='topic_" + response.data[i]['id'] + "'\>"; contents += response.data[i]['message']; contents += "</div>"; contents += "<div class='fb-comments' data-href=' -- パーマリンク等、投稿毎の識別子 -- ' data-num-posts='10' data-width='470'></div>"; } } // ウォールの内容を表示させる document.getElementById('topics').innerHTML = contents; }); } window.fbAsyncInit = function() { getWall(); }; </script> <div id='topics'></div>