我创建了一个 Facebook 应用程序来将我的网站存放在 iframe 中。
在每次请求时,我都想检查该网站是否在 Facebook 应用程序内,否则我想将用户重定向到 Facebook 应用程序。
我可以使用 javascript 检查我是否在 iframe 中:
如果(顶部!=自我)
但我不知道我是否真的在 Facebook 应用程序中。跨域安全性阻碍了我访问父文档的信息。例如,无法访问“top.location.href”。
有人可以帮我吗?:-)
我创建了一个 Facebook 应用程序来将我的网站存放在 iframe 中。
在每次请求时,我都想检查该网站是否在 Facebook 应用程序内,否则我想将用户重定向到 Facebook 应用程序。
我可以使用 javascript 检查我是否在 iframe 中:
如果(顶部!=自我)
但我不知道我是否真的在 Facebook 应用程序中。跨域安全性阻碍了我访问父文档的信息。例如,无法访问“top.location.href”。
有人可以帮我吗?:-)
Facebook 为 window.name 附加了一个值,因此您可以使用 JavaScript 进行检查。
if(window.name.indexOf('iframe_canvas_fb') != -1){
// in Facebook
} else {
// not in Facebook
}
您可以从 facebook 的 javascript 库中检查 FB.Canvas 命名空间方法。它将在 Facebook 画布上工作。
https://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/
检查您在 Facebook 的 iframe、iframe 外部或另一个 iframe 中获得的信息。
希望这可以帮助
好吧,如果用户在 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 可怕的文档来说是一场噩梦。
希望这可以帮助你 :)