2

如果我的 Facebook 画布页面指向 mydomain.com,并且如果用户直接访问 mydomain.com,我如何让该网站显示在 Facebook 画布页面上?基本上,我希望我的网站始终加载到 Facebook 画布上。如果我只是重定向到apps.facebook.com/mydomain,我认为它会进入无限循环,因为Facebook 画布正在尝试加载mydomain.com。

4

4 回答 4

1

你可以在javascript中做客户端。检查页面当前是否在 iframe 中打开,如果不是,您不在 facebook 中,应该执行重定向:

if(window.parent === window) 做重定向

您可以找到一种在服务器端实现它的方法,但是,除非 facebook 在加载时传递一些特定参数,否则您可能需要依赖 HTTP_REFERER 参数并且浏览器不会总是发送它。

于 2012-09-01T23:20:04.497 回答
1

我在另一个问题上找到了这个并在我自己的脚本中使用它:

<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

于 2012-09-02T15:46:46.580 回答
1

检查 HTTP 请求标头中的引荐来源网址,并以此为基础。话虽如此,我不知道将您的整个网站重定向到 Facebook 是解决您问题的好方法。

更好的解决方案是将 Facebook 应用程序部分托管在单独的页面或域上,并从您的首页链接到它。

于 2012-09-01T23:06:12.500 回答
1

如果您的应用程序正在 Facebook 中加载,则该页面将被发布到,并且 POST 数据将包含一个signed_request字段。这可以在服务器上用于发现用户是否正确访问应用程序 - 如何在 iframe 内的导航中保留此信息取决于您。

客户端可以查window !== top,和/canvas/.test(window.name)

于 2012-09-02T00:24:58.553 回答