2

我创建了一个 Facebook 应用程序来将我的网站存放在 iframe 中。

在每次请求时,我都想检查该网站是否在 Facebook 应用程序内,否则我想将用户重定向到 Facebook 应用程序。

我可以使用 javascript 检查我是否在 iframe 中:

如果(顶部!=自我)

但我不知道我是否真的在 Facebook 应用程序中。跨域安全性阻碍了我访问父文档的信息。例如,无法访问“top.location.href”。

有人可以帮我吗?:-)

4

3 回答 3

3

Facebook 为 window.name 附加了一个值,因此您可以使用 JavaScript 进行检查。

if(window.name.indexOf('iframe_canvas_fb') != -1){
  // in Facebook
} else {
  // not in Facebook
}
于 2012-06-27T14:14:51.643 回答
0

您可以从 facebook 的 javascript 库中检查 FB.Canvas 命名空间方法。它将在 Facebook 画布上工作。

https://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/  

检查您在 Facebook 的 iframe、iframe 外部或另一个 iframe 中获得的信息。

希望这可以帮助

于 2011-10-04T15:07:42.773 回答
-1

好吧,如果用户在 Facebook 之外,body html 标签之前的这段脚本应该将他们重定向回你在 Facebook 上的页面:

<script language="JavaScript" type="text/javascript">
<!--
if (self == top) {
    window.location = "http://apps.facebook.com/YOUR_APP_PAGE";
}
-->
</script>

记得将“YOUR_APP_PAGE”位更改为:“my-application?app_data=page-location”

您可以使用 php 将请求 ?app_data 发送到您的 Facebook 页面,并附加您的网站被重定向的页面,以便 app_data 可以告诉您的应用程序在 Facebook 内加载此页面。

所以值得查找 Facebook app_data

如果您想根据页面是否显示在 Facebook 上来更改页面样式,请使用以下命令:

<script language="JavaScript" type="text/javascript">
<!--
if (window.self = "http://apps.facebook.com/") {
    var element = document.getElementById('html');
    element.className = "facebook"; 
}
-->
</script>

并使用 id=html 修改您的 html 标记,如下所示:

<html id="html" xmlns:fb="http://www.facebook.com/2008/fbml">

这将允许您使用类名 .facebook 为您喜欢的页面重新映射任何样式。

如果您需要设置一些初始 php 设置,如重定向页面,那么您可以在 php 中使用此代码来检测您是否在 Facebook 内,但是此代码无法检测用户是否在登录后在 Facebook 上:

if(!empty($_POST['signed_request'])){
//do something with php here...
}

笔记:

您的应用页面上的 Facebook 用户不太可能关闭 JavaScript,这就是我们可以使用上述 php 代码设置重定向等的原因...

php 不应该真正依赖 $_SESSION 或 cookie,以防用户决定访问已登录 Facebook 应用程序的页面,php 需要刷新页面才能确定他们不再从会话中进入 Facebook 或曲奇饼。

想了想:

所有这些信息都应该在 Facebook SDK 上,因为管理重定向和应用程序检测对于 Facebook 可怕的文档来说是一场噩梦。

希望这可以帮助你 :)

于 2013-10-28T04:17:09.910 回答