我使用iframe从我的服务器渲染我的应用程序。问题是,一旦我点击我的应用程序中的链接,我就被重定向到我的服务器。我的意思是,我留在画布页面一秒钟,然后突然而不是在Facebook网站上的iframe中查看它,我重定向我的服务器上的应用程序URL。我正在使用PHP和MySQL。
为什么会发生这种情况。
萤火虫信息:这是firebug提供的POST信息。由于上述问题,它也没有POST到DB。<html>
<body>
<script type="text/javascript">
top.location.href = "http://www.facebook.com/login.php?v=1.0&api_key="xxxxx"&next=http%3A%2F%2F<my-web-server.com>%2F<appfolder>%2Fuser_submit.php";
</script>
修改
显然,它在Chrome for Mac中运行良好。
编辑2
我刚刚通过Firebug通过[停止] Facebook页面上的浏览器找到的内容:只有这部分应用程序正在Facebook页面上加载。应用程序的其余部分在将其重定向到我的服务器后会加载。
<body>
<div id="wrap-iframe">
<script type="text/javascript">
top.location.href = "http://www.facebook.com/login.php?v=1.0&api_key="xxxxx"&next=http%3A%2F%2Fmy-domain-server.com%2Fapplocation%2Fuser.php";
</script></div></body>
编辑3
我做了一些修补,显然,它进一步激怒了它。现在甚至第一页都重定向了我。如果我记得我做了什么...... :-(
Warning: Cannot modify header information - headers already sent by (output started at /home/amitver/public_html/roadies/user.php:7) in /home/amitver/public_html/roadies/facebook.php on line 257
Warning: Cannot modify header information - headers already sent by (output started at /home/amitver/public_html/roadies/user.php:7) in /home/amitver/public_html/roadies/facebook.php on line 257
Warning: Cannot modify header information - headers already sent by (output started at /home/amitver/public_html/roadies/user.php:7) in /home/amitver/public_html/roadies/facebook.php on line 257
Warning: Cannot modify header information - headers already sent by (output started at /home/amitver/public_html/roadies/user.php:7) in /home/amitver/public_html/roadies/facebook.php on line 261
答案 0 :(得分:0)
我有一段时间没有这个问题了。要尝试两件事:
<?php
标记之前没有字符/空格(它应该是文件中的第一个)答案 1 :(得分:0)
尝试将此代码放在页面顶部:
ob_start();
这至少可以解决“已发送标头”错误的问题。
答案 2 :(得分:0)
有一个众所周知的原因,但需要一些调查才能找到。 IIRC,当有人更改你的iframe中的页面时,你正在进行另一个require_login调用。 FB客户端尝试使用可用数据进行身份验证 - 发布/获取/ cookie - 但如果失败则会重定向到fb登录。如果用户已经登录并授权您的应用程序,这将立即(无形地)重定向回您的应用程序,但Facebook的结尾(我认为)有一个错误导致它重定向到您的回调网址而不是您的画布网址因此弹出框架。
解决方案:将查询字符串中的fb_ get params传递给每个页面。基本上将所有内容从URL中的“fb_”开始,并将其粘贴到所有链接上。这为api客户端提供了一些其他功能来验证。
答案 3 :(得分:0)
http://www.facebook.com/login.php?v=1.0&api_key= “XXXXX” &安培;下一= http://someurl.com/user.php&canvas=1“;
添加canvas = 1似乎可以解决问题。将其保留在画布中,不会打开回调网址。