2

我已经阅读了许多问题和答案,包括StackOverflow 上的这个问题和答案,但没有一个有效。我对我看到的所有回复的问题是“它在 Safari 中有效吗?”。

我试图让它与 Safari 一起使用。它适用于 Chrome 和 Firefox。但在 Safari 中,登录屏幕只是冻结,我收到“不安全的 JavaScript 尝试使用 URL 访问框架”日志消息。

我有一个画布应用程序。我想登录用户并在他们登录后将他们重定向到一个页面。我试图在登录后直接重定向。我试过了

  1. 设置window.top.location为 facebook url(将一些数据作为 all_data 参数传递给签名请求)

  2. 设置window.location为与我的应用具有相同域的 URL。

  3. 订阅auth.login事件并将重定向放在那里

  4. 将重定向放在回调中以登录

这些都不适用于 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"
    }
  );
}
4

2 回答 2

0

这不是解决您的问题的方法,而是更多的“解决方法”,尽管它仍然使用window.top.location但不是来自回调,所以它可能会起作用(我只是不确定回调在哪里执行,因为它是 fb sdk 执行它,也许他们从你的 iframe 内的 fb iframe 调用它)。

您可以使用服务器端流程,而不是使用客户端身份验证。整个过程发生在顶部窗口中,因为它首先使用 . 将用户重定向到 oauth 对话框window.top.location

当流程结束时,facebook 将用户重定向到您的 redirect_uri,您可以简单地将用户重定向到您想要的任何位置。

我希望这将有所帮助。此外,您应该注意Facebook 平台政策中规定:

13. Facebook 上的 Canvas 或 Page Tab 应用程序的主要目的不能是简单地将用户从 Facebook 体验重定向到外部网站。

于 2012-05-22T16:39:18.873 回答
0

事实证明,问题在登录过程中稍早发生,并且从未调用过回调。我确实在回调中设置了一个断点(没有被调用),但我认为断点可能由于某种原因不起作用(可能是因为它是在另一个窗口的上下文中执行的)。

无论如何,问题在于通道文件(文档似乎建议是可选的)无法正常工作,这导致 Safari 出现问题,但其他浏览器没有。

于 2012-05-23T10:06:39.710 回答