我已经阅读了许多问题和答案,包括StackOverflow上的this one,但没有任何问题和答案。我对所见的所有回答的问题是“它在Safari中有效吗?”。
我试图让它与Safari一起使用。它适用于Chrome和Firefox。但在Safari中,登录屏幕只是冻结,我得到“不安全的JavaScript尝试访问带URL的帧”日志消息。
我有一个画布应用程序。我希望将用户登录并在他们登录后将其重定向到页面。我正在尝试在登录后直接重定向。我试过了
将window.top.location
设置为facebook url(将一些数据作为all_data参数传递给已签名的请求)
将window.location
设置为与我的应用具有相同域名的网址。
订阅auth.login
事件并将重定向放在那里
将重定向放入回调中以登录
这些都不适用于Safari。我开始认为没有办法做到这一点。
function doSomething()
{
FB.login(
function(loginResponse)
{
if (loginResponse.authResponse)
{
window.top.location = "my url"
}
},
{
scope:"some,scope"
}
);
}
}
作为对Nitzan Tomer的回应,以下是与Safari不兼容但与其他人合作的等效代码:
function myThing()
{
FB.login(function(loginResponse)
{
if (loginResponse.authResponse)
{
FB.api('/me', function(response)
{
window.location = "http://my_app.com?x=" + response.xyz;
});
}
},
{
scope:"scopes"
}
);
}
答案 0 :(得分:0)
这不是解决问题的方法,而是更多的解决方案"虽然它仍然使用window.top.location
但不是来自回调所以它可能会起作用(I&#39 ;我只是不确定回调的执行位置,因为它是执行回调的fb sdk,也许是从你iframe中的fb iframe调用它。)
您可以使用server side flow,而不是使用客户端身份验证。
整个过程发生在顶部窗口,因为它是使用window.top.location
将用户重定向到oauth对话框开始的。
当流程结束时,Facebook会将用户重定向到您的redirect_uri,您只需将用户重定向到您想要的位置即可。
我希望这会有所帮助。 此外,您应该知道它在Facebook Platform Policies中声明:
13。 Facebook上的Canvas或Page Tab应用程序的主要目的不是简单地将用户重定向到Facebook体验之外 并进入外部网站。
答案 1 :(得分:0)
事实证明问题在登录过程中稍早发生,并且回调从未被调用过。我确实在回调中设置了一个断点(没有被调用),但我认为断点可能由于某种原因不起作用(可能是因为它是在另一个窗口的上下文中执行)。
无论如何,问题是频道文件(文档似乎建议是可选的)无法正常工作,这导致Safari出现问题,而其他浏览器则没有。