在使用Facebook Connect登录后,如何返回iPhone web应用程序?

在使用Facebook Connect登录后,如何返回iPhone web应用程序?,iphone,web-applications,mobile-website,facebook-javascript-sdk,facebook-login,Iphone,Web Applications,Mobile Website,Facebook Javascript Sdk,Facebook Login,我有一个使用jQuery mobile构建的移动网站。我经常在iPhone上以全屏/移动网络应用模式运行它(我已经将网络应用添加到iPhone主屏幕) 在其中一个页面上,用户需要使用Facebook Connect JavaScript API登录到Facebook。如果用户尚未登录,请单击登录按钮。此按钮的事件处理程序如下所示: ("#fbLogin").click(function () { FB.login(handleStatusChange(response),

我有一个使用jQuery mobile构建的移动网站。我经常在iPhone上以全屏/移动网络应用模式运行它(我已经将网络应用添加到iPhone主屏幕)

在其中一个页面上,用户需要使用Facebook Connect JavaScript API登录到Facebook。如果用户尚未登录,请单击登录按钮。此按钮的事件处理程序如下所示:

("#fbLogin").click(function () {
      FB.login(handleStatusChange(response), 
      { scope: "publish_stream", 
        connect_display: "touch" });
});
在上面的代码中,为了更好的可读性,我插入了一些换行符,但是这些值与示例中的值类似。回调函数(handleStatusChange)负责处理登录请求的响应

当我单击此按钮时,Facebook登录页面将在我的web应用程序窗口中打开。如果我还没有接受Facebook应用程序,我也必须授予它权限。所有这些似乎都很有效。但在我授予权限/登录后,我就被留在了一个完全空白的屏幕上

我还尝试了另一种登录方法,将其放入登录按钮事件处理程序中:

window.location = "https://www.facebook.com/login.php
?api_key=MY_API_KEY
&cancel_url=http%3A%2F%2Fwww.mywebsiteurl.com%3A8081
&fbconnect=1
&next=http%3A%2F%2Fwww.mywebsiteurl.com%3A8081
&return_session=1
&session_version=3
&v=1.0
&req_perms=publish_stream
&connect_display=touch";
同样,为了更好的可读性,插入了换行符。使用时,它只是一根长字符串

cancel\u URLnext参数中使用的URL是我在Facebook应用程序中注册的URL。如果我尝试使用不同的URL(如),我会得到一个错误,因此这似乎是正确的。如您所见,我在开发服务器上使用了不同的端口(端口8081)。这可能是个问题吗

结果与前面的示例类似。我得到了登录/权限页面,但在所有事情完成后,我的屏幕都是空白的。之后我试过这个

另一方面,如果我尝试在Safari中运行它(而不是作为一个完整页面的iPhone web应用程序),登录效果会很好

还有什么我可以试试的吗?是否有人在iPhone上以全屏/web应用程序模式运行时使用JavaScript API Facebook Connect登录


提前谢谢

不确定这是否对您有帮助,但我发现添加iOS Safari链接修复程序也允许Facebook登录在我的全屏web应用程序中工作,而无需打开我的“常规”Safari页面:


另请参见

如果您尝试在全屏/web应用模式下运行Facebooks自己的移动网站演示网站()(将其添加到主屏幕),您也会看到同样的问题。今天,我从Facebook收到一条消息,他们确认这是一个bug,并且已分配给开发团队。如果有人有可行的解决办法,我洗耳恭听。否则我们只能等待Facebook开发团队提供更多信息。Tkahn的bug在这里报道
// Make links work in iOS fullscreen web app
function disableSafariLinks() {
    $("a").click(function (event) {
        event.preventDefault();
        window.location = $(this).attr("href");
    });
}