Facebook キャンバス ページが mydomain.com を指している場合、ユーザーが直接 mydomain.com にアクセスした場合、Facebook キャンバス ページにサイトを表示するにはどうすればよいですか? 基本的に、私は自分のウェブサイトが常に Facebook キャンバスに読み込まれるようにしたいと考えています。apps.facebook.com/mydomain へのリダイレクトだけを行うと、Facebook キャンバスが mydomain.com をロードしようとしているため、無限ループに入ると思います。
4 に答える
別の質問でこれを見つけて、自分のスクリプトで使用します。
<script type="text/javascript">
function NotInFacebookFrame() {
return top === self;
}
function ReferrerIsFacebookApp() {
if(document.referrer) {
return document.referrer.indexOf("apps.facebook.com") != -1;
}
return false;
}
if (NotInFacebookFrame()) {
top.location.replace("https://apps.facebook.com/YOUR_APP_NAMESPACE");
}
</script>
これは、それらが現在 Facebook フレームにあるかどうかを確認し、*そうでない場合のみ、"https://apps.facebook.com/YOUR_APP_NAMESPACE" にリダイレクトします。
注: URL を適宜変更するだけで、アプリ内の任意のページでこれを使用できます。
例: http://YourDomain.com/anotherpage.phpでこれを使用している場合、上記のコードの URL をhttps://apps.facebook.com/YOUR_APP_NAMESPACE/anotherpage.phpに変更できます。
アプリが Facebook 内に読み込まれている場合、ページは POST され、POST データにはsigned_request
フィールドが含まれます。これをサーバーで使用して、ユーザーがアプリに正しくアクセスしているかどうかを検出できます。iframe 内のナビゲーション全体でこの情報を保持する方法は、あなた次第です。
クライアント側で確認できるwindow !== top
、および/canvas/.test(window.name)
.
JavaScriptでクライアント側で行うことができます。ページが現在 iframe 内で開かれているかどうかを確認します。そうでない場合は、Facebook 内にいないため、リダイレクトを実行する必要があります。
if(window.parent === window) リダイレクトを行う
サーバー側で実装する方法を見つけることができますが、読み込み時に facebook がいくつかの特定のパラメーターを渡さない限り、おそらく HTTP_REFERER パラメーターに依存する必要があり、ブラウザーはそれを常に送信するとは限りません。
HTTP 要求ヘッダーでリファラーを確認し、それに基づいてロジックを作成します。そうは言っても、サイト全体を Facebook にリダイレクトすることが問題の解決策になるかどうかはわかりません。
より良い解決策は、Facebook アプリの部分を別のページまたはドメインでホストし、フロントページからリンクすることです。