先日、お客様から「埋め込んであるFacebookの幅が狭くなっちゃってるんだけど?」という問い合わせを受けました。今回はブラウザ幅を変更した際、動的にPagePluginを再読み込みさせて幅をフィットさせる方法を紹介します。
問題発生
まずはドキュメントに添い、PagePluginをwebサイトに埋め込みます。
(詳しい設定方法はこちらを参照してください↓)
★公式ドキュメント : ページプラグイン – ソーシャルプラグイン
https://developers.facebook.com/docs/plugins/page-plugin
な〜んだ、プレビューも出来るし超簡単!
…と、思いきやこんな記述が。
デフォルトでは、ページの読み込み時に、親コンテナーのwidth (最小180px/最大500px)に合わせてプラグインの幅が設定されます。レイアウトを変更する場合も便利です。
https://developers.facebook.com/docs/plugins/page-plugin
〜(略)〜
ウィンドウのサイズ変更に合わせてプラグインのwidthを調整する場合は、プラグインを手動で再表示する必要があります。
要は…
もしも狭いウィンドウサイズでページを開いたら狭い幅で固定されます。
そのあとウィンドウサイズを広げても固定された幅のままです。
レスポンシブにしたい時は手動で再表示してね。
例えばサイドバーに設置して、他の要素はレスポンシブで可変するが、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をレスポンシブのリサイズに対応させる方法” にあります。