先日、お客様から「埋め込んであるFacebookの幅が狭くなっちゃってるんだけど?」という問い合わせを受けました。今回はブラウザ幅を変更した際、動的にPagePluginを再読み込みさせて幅をフィットさせる方法を紹介します。

問題発生

まずはドキュメントに添い、PagePluginをwebサイトに埋め込みます。
(詳しい設定方法はこちらを参照してください↓)

★公式ドキュメント : ページプラグイン – ソーシャルプラグイン
https://developers.facebook.com/docs/plugins/page-plugin

な〜んだ、プレビューも出来るし超簡単!
…と、思いきやこんな記述が。

デフォルトでは、ページの読み込み時に、親コンテナーのwidth (最小180px/最大500px)に合わせてプラグインの幅が設定されます。レイアウトを変更する場合も便利です。
〜(略)〜
ウィンドウのサイズ変更に合わせてプラグインのwidthを調整する場合は、プラグインを手動で再表示する必要があります。

https://developers.facebook.com/docs/plugins/page-plugin

要は…
もしも狭いウィンドウサイズでページを開いたら狭い幅で固定されます。
そのあとウィンドウサイズを広げても固定された幅のままです。
レスポンシブにしたい時は手動で再表示してね。

例えばサイドバーに設置して、他の要素はレスポンシブで可変するが、FBのプラグインだけは固定幅のまま。こんな感じになります。

手動で再表示って?と思い方法を探しても公式にそれらしき記述がないのです。

対応方法

CSSとJavaScriptを使って手動で再表示させて行きましょう。

1.CSSに以下を記述します。

.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style]{
    width: 100% !important;
}

2.表示させたい部分に取得してきたコードを記述。そしてDivで囲う。data-width は 500 です。

<div id="pagePlugin">
    <!-- 取得してきたコード -->
    <div class="fb-page" data-href="https://www.facebook.com/facebook" data-width="500" data-tabs="timeline" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote class="fb-xfbml-parse-ignore" cite="https://www.facebook.com/facebook"><a href="https://www.facebook.com/facebook">Facebook</a></blockquote></div>
    <!-- 取得してきたコード -->
</div>

3.表示させるために必要な部分(①)の他に、②を追加。

//①プラグインを表示させる
<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/sdk.js#xfbml=1&version=v2.4&appId=○○○○○○○";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script> 

//②再描画 
<script>
  var timer = false;
  $(window).resize(function() {
      if (timer !== false) {
        clearTimeout(timer);
      }
      timer = setTimeout(function() {
        boxWidth=$('#pagePlugin').width();
        currentWidth=$('#pagePlugin .fb-page').attr('data-width');
        if(boxWidth != currentWidth){
          $('#pagePlugin .fb-page').attr('data-width', boxWidth);
          FB.XFBML.parse(document.getElementById('pagePlugin'));
        }
      }, 200);
  });
</script>

これでウィンドウサイズが変わる度に、再描写してくれるようになりました。

【参考サイト】

・FacebookのPage Pluginをリサイズに対応させる
http://www.tam-tam.co.jp/tipsnote/javascript/post10450.html

・FacebookのPagePlugin版Like Boxの幅を動的に変える方法
http://mspec.jp/blog/archives/214

4 件のコメントが “[その1]FacebookのPagePluginをレスポンシブのリサイズに対応させる方法” にあります。

  1. イデ より:

    凄い!すごい!
    今まで何日も費やして
    ”一発でFacebookをレスポンシブに対応させる方法”なるサイトをいくつもその通りにやってみた結果が全く通用しない。どれもダメ。。
    諦めてようとしたところ、偶然こちらのサイトを見つけ、
    どうせダメだろうと思ってやってみたところ、
    なんと!一発でレスポンシブ表示!!
    本当に凄い方ですね。驚きました!
    有難うございました!

    1. kazu より:

      イデ様

      嬉しいコメントありがとうございます!
      ですが、内容をまとめられたのも、参考サイトのおかげです…。

      古い記事なので、現在の仕様とは少し違ってるかもしれませんが、お役に立てて嬉しいです!

      この記事の続きもあるので、もし良ければご覧下さい。
      https://netamame.com/fb-page-plugin-resize-2/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です