先日、お客様から「埋め込んである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

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

コメントを残す

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