facebookページ の埋め込みが表示されない (未解決→解消)

PC のブラウザから facebookページ の埋め込みが表示されない現象に遭遇したのでメモ。

現象

facebookページ の埋め込み位置がブランクになった状態
facebookページ の埋め込み位置がブランクになった状態

本来 facebookページ の埋め込みが表示されるべきスペースに何も表示されない……あるいは、ブラウザによってはそのブラウザで用意されたエラーページが表示される場合もありますが、いずれにしても本来の facebookページ が表示されない、ということに変わりはありません。

ちなみにコンソールでは次のエラーが記録されていました。

Refused to display ‘https://www.facebook.com/’ in a frame because it set ‘X-Frame-Options’ to ‘deny’.

いつからかは正確には分かりませんが、3/28頃は表示されていたと記憶しているので、それ以降ということになります。

コード

現象が発生したコードです。 facebookページ はサンプルまでに Meta 公式のページを指定しています。

<!-- body直下 -->
<div id="fb-root"></div>
<script defer crossorigin="anonymous" src="https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v13.0"></script>

<!-- 埋め込み位置 -->
<div class="fb-page" data-href="https://www.facebook.com/facebook" data-tabs="timeline" data-width="500" data-height="500" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/facebook" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/facebook">Meta</a></blockquote></div>

やっていることはページプラグイン – ソーシャルプラグインで取得できるコードをそのまま貼り付けているだけです。

原因

X-Frame-Options: DENY が HTTPレスポンスヘッダ にセットされている
X-Frame-Options: DENY が HTTPレスポンスヘッダ にセットされている

facebook の SDK サーバの HTTPレスポンスヘッダ に X-Frame-Options: DENY がセットされているため、ブラウザがそのポリシーに従ってブロックしている、という状態のようです。上述現象のエラーも同じことを言っていますね。

解決にはこの HTTPレスポンスヘッダ を除去する必要がありますが、今回はサーバが facebook のサーバなので手出しはできず、どうにもならない感じです。

スマホのみ閲覧できた理由については詳しく検証していないので不明です。

PCでユーザエージェントを変更しても効果はなかったのでどのように判定しているのかは不明ですが、どうにかPCとスマホを判別しているのか、あるいはスマホのブラウザでは X-Frame-Options を無視しているのか……というところですかね。

一応試したこと

どうにもならないことは分かっていますが、念のため試したこと。

  • iframe で埋め込んでみる
  • facebook.comfacebook.net でセットされている Cookie を削除 (Twitter情報より / 実際は facebook の文字列で検索したので左記以外のものも含まれる)
  • シークレットウインドウ・プライベートウインドウで表示

4/23 追記

4/21時点で再度確認したところ正常に表示されるようになりました。一時的な不具合?だったのでしょうか。

参考

facebook 埋め込み

X-Frame-Options

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。