如果我的 Facebook 画布页面指向 mydomain.com,并且如果用户直接访问 mydomain.com,我如何让该网站显示在 Facebook 画布页面上?基本上,我希望我的网站始终加载到 Facebook 画布上。如果我只是重定向到apps.facebook.com/mydomain,我认为它会进入无限循环,因为Facebook 画布正在尝试加载mydomain.com。
4 回答
你可以在javascript中做客户端。检查页面当前是否在 iframe 中打开,如果不是,您不在 facebook 中,应该执行重定向:
if(window.parent === window) 做重定向
您可以找到一种在服务器端实现它的方法,但是,除非 facebook 在加载时传递一些特定参数,否则您可能需要依赖 HTTP_REFERER 参数并且浏览器不会总是发送它。
我在另一个问题上找到了这个并在我自己的脚本中使用它:
<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
检查 HTTP 请求标头中的引荐来源网址,并以此为基础。话虽如此,我不知道将您的整个网站重定向到 Facebook 是解决您问题的好方法。
更好的解决方案是将 Facebook 应用程序部分托管在单独的页面或域上,并从您的首页链接到它。
如果您的应用程序正在 Facebook 中加载,则该页面将被发布到,并且 POST 数据将包含一个signed_request
字段。这可以在服务器上用于发现用户是否正确访问应用程序 - 如何在 iframe 内的导航中保留此信息取决于您。
客户端可以查window !== top
,和/canvas/.test(window.name)
。