Jump to the content

Ajaxで動的に追加したSNSボタンを表示させる方法と、SNSボタンの再読み込みについて

JavaScript, SNS

    どうも、イソップです。

    Ajaxで読み込んだコンテンツの中にSNSボタンがあったとしても、レンダリングされません。
    さぁ、困りました。

    でも調べてみたら、表示させる方法がちゃ〜んと用意されていましたよ。
    ボタンだけを再読み込み(リロード)したいときにも使えます。

    Twitter

    HTML

    <!-- 事前にtwitter-widgetの読み込み -->
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
    

    もしくはJS側でwidgetを読み込んでおく。

    // 事前にtwitter-widgetの読み込み
    window.twttr = (function (d,s,id) {
      var t, js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;
      js.src="https://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);
      return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });
    }(document, "script", "twitter-wjs"));
    

    例えば、動的にボタン要素を追加したとする。

    <div class="contents">
      <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://***" data-lang="ja" data-text="Tweet!">ツイート</a>
    </div>
    

    JavaScript

    // 任意のタイミングで更新
    twttr.widgets.load();
    
    // DOMを引数で指定すると、その子要素を探索するので速くなる
    twttr.widgets.load(document.getElementById('contents'));
    

    Facebook

    いいねボタンもシェアボタンも同じ仕組みです。

    HTML

    <!-- 事前にJavascriptSDKの読み込み -->
    <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&appId=*****";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
    

    例えば、動的にボタン要素を追加したとする。

    <!-- いいねボタン -->
    <div class="contents">
      <div class="fb-like" data-href="http://***/" data-send="false" data-layout="button" data-width="200" data-show-faces="false"></div>
    </div>
    
    <!-- シェアボタン -->
    <div class="contents">
      <div class="fb-share-button" data-href="http://***" data-layout="button" data-size="small" data-mobile-iframe="true"><a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2F[***]amp;src=sdkpreparse">シェア</a></div>
    </div>
    

    JavaScript

    // 任意のタイミングで更新
    FB.XFBML.parse();
    
    // DOMを引数で指定すると、その子要素を探索するので速くなる
    FB.XFBML.parse(document.getElementById('contents'));
    

    SNSボタンの実装方法はこちらから

    注目記事

    最近の記事

    ぼくが書いてます

    フロントエンドエンジニア

    イソップ

    ページの先頭に戻る

    Search results

    ×