facebook将应用程序从画布页面重定向到粉丝页面
Posted
技术标签:
【中文标题】facebook将应用程序从画布页面重定向到粉丝页面【英文标题】:facebook redirect app from canvas page to fan page 【发布时间】:2011-08-08 13:13:45 【问题描述】:我正在将 facebook 应用程序构建为粉丝页面中的 iframe 应用程序。我现在的问题是下一个:我添加了 facebook 请求对话框(http://developers.facebook.com/docs/reference/dialogs/requests),一切都很顺利,除了一件事:当用户收到通知时,链接转到画布页面,而不是粉丝页面(我想去的地方......)
由于我无法说服 facebook 添加一些功能(那会很棒),我正在寻找一种方法来自动从应用程序画布页面重定向到粉丝页面,该应用程序被添加为 iframe 选项卡。
我希望有人明白我想做什么...... :)
谢谢,彼得
【问题讨论】:
【参考方案1】:如果我理解正确,你可以这样做:
top.location.href='http://www.facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID'
或者您可以使用标头重定向到该网址。这将重定向到您的粉丝页面上的应用程序选项卡。
【讨论】:
我遇到了同样的问题,我想知道你们是如何检测到您在应用页面而不是画布 URL 上的。如何防止无限重定向循环? @迈克尔。好吧,你通常把tab url和page url分开,或者在应用程序设置中添加一个GET参数来知道调用了哪个页面。 @DannyKK。谢谢你的提示。我找到了另一种方法来执行此操作,而无需设置 GET 变量。您还可以检查 $_SERVER['HTTP_REFERER'] 变量以查看 apps.facebook.com 是否存在。 是的,我也这样做。但我现在面临另一个问题:当我在 HTTP_REFERER 中有 apps.facebook.com 时,我会这样做:top.location.href='facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID' - 它在 mozzila 和 chrome 中工作正常,但在 Internet Explorer 中我得到“权限被拒绝”。我发现它是一个跨域脚本,但什么是解决方法?有人有同样的问题吗? 对不起,我正在处理:top.window.location,当我更改为 top.location.href 时它正在工作:)【参考方案2】:我还想确保用户通过 Facebook 页面选项卡查看我的 Facebook 应用程序(而不是通过 Facebook 应用程序页面或直接查看实际网站本身)。我已经设法在我的文档的head
中的<script>
标记中使用这个javascript 来实现它(测试过的Mac/PC FF、Chrome、Opera、IE6-8、Safari)。
<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() || ReferrerIsFacebookApp())
top.location.replace("http://permalink-to-my-facebook-page-tab");
</script>
【讨论】:
天哪,正是我所需要的。我只更改为使用带有命名空间的函数。【参考方案3】:我的应用程序非常动态,我不知道它被添加到了哪个页面。因此,当我使用 URL 'http://www.facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID' 时,它只将我重定向到页面,而不是应用程序选项卡。我要做的是:
1) 我从 signed_request 中获取页面 id(当有人访问该页面时,您的应用会获取加密的 base64url 参数,因此您必须对其进行解密并从 JSON 页面对象中选择 id 值)
2) 然后我从https://graph.facebook.com/PAGE_ID_YOUR_GET 获取页面数据。您将获得带有一些页面数据的 JSON 对象,以 JSON 格式响应。
3) 只有在第 2 点之后,我才能从响应中获得页面的“链接”值。就像http://www.facebook.com/pages/Some-Page-Name
4) 最后我将“?sk=app_YOUR_APP_ID”添加到页面链接。
也许这太复杂了,但这是它以我预期的方式为我工作的唯一方法(完全重定向到页面应用程序选项卡)。
【讨论】:
如果用户直接访问您的应用程序(画布),这将不起作用,签名请求中不会有页面对象,因此无论哪种方式,您都必须在应用程序配置的每个实例中设置页面名称和 id做一个重定向到正确的地方。【参考方案4】:<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() || ReferrerIsFacebookApp())
top.location.replace("http://permalink-to-my-facebook-page-tab");
</script>
【讨论】:
以上是关于facebook将应用程序从画布页面重定向到粉丝页面的主要内容,如果未能解决你的问题,请参考以下文章