如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
How to redirect a site to the Facebook canvas URL without going to an infinite loop?
如果我的Facebook画布页面指向mydomain.com,并且用户直接转到mydomain.com时,我如何使该网站显示在Facebook画布页面上?基本上,我希望我的网站总是加载在Facebook画布上。如果我只是重定向到apps.facebook.com/mydomain,我认为它会进入一个无限循环,因为facebook画布正试图加载mydomain.com.
检查HTTP请求标头中的referrer,并在此基础上进行逻辑处理。话虽如此,我不知道将你的整个网站重定向到Facebook是否能很好地解决你的问题。
一个更好的解决方案是在一个单独的页面或域上托管Facebook应用程序部分,并从首页链接到它。
您可以在客户端用javascript实现。检查页面当前是否在iframe内打开,如果不是这样,你不在facebook内,应该执行重定向:
如果(window.parent===window)执行重定向
你可以找到一种在服务器端实现它的方法,但是,除非facebook在加载时传递一些特定的参数,否则你可能需要依赖HTTP_REFERER参数,浏览器不会总是发送它。
如果您的应用程序正在Facebook中加载,则页面将被POST到,POST数据将包含一个signed_request
字段。这可以在服务器上用来发现用户是否正确访问了应用程序——如何在iframe中的导航中保持这些信息取决于您。
客户端可以检查window !== top
和/canvas/.test(window.name)
。
我在另一个问题上发现了这一点,并在我自己的脚本中使用:
<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
- 如何在一页网站中使用PHP重定向到一个页面
- 移动网站重定向问题
- 如何重定向到我的html网站youtube嵌入视频打开在youtube应用程序
- 检测重定向并相应地显示网站
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- 如何从特定类别重定向到另一个网站
- 使用window.location.htm和匹配的URL数组(一个用于桌面,一个用于移动)将桌面网站重定向到移动
- 从手机重定向时如何留在桌面网站(wordpress)
- 随机一段时间后重定向网站
- 网站主页重定向到空白页面
- 将网站重定向到未知的内部地址
- 重定向至使用PHP的网站
- 每次我点击我的网站,它都会重定向到home.html,然后返回到我点击的所需url
- 移动重定向,但来自移动网站时不重定向
- 谷歌CSE-我可以显示嵌入在我的网站上的页面本身,而不是从结果视图重定向到页面
- 防止Angular网站上未经授权的用户在重定向到登录之前看到网站的最佳方式
- 如何让我的重定向脚本添加一个随机后缀来选择网站
- 根据用户位置重定向网站
- 重定向网站到移动..文件名
- 根据用户所在国家/地区重定向网站