FB.getLoginStatus永远不会在Facebook的JavaScript SDK中触发回调函数

时间:2011-04-21 08:04:33

标签: facebook-iframe facebook-javascript-sdk

调用FB.init(在</body>之前)然后FB.getLoginStatus(callback)的简单操作不会触发回调函数。

经过一些调试后,我认为SDK卡在“加载”(即FB.Auth._loadState == 'loading')阶段并且永远不会“加载”,因此所有回调都会排队,直到SDK加载完毕。 如果我在调试期间强制触发“已加载”事件 - 使用FB.Event.fire('FB.loginStatus', 'loaded')以防您有兴趣 - 那么可以正确调用回调。

可能相关的额外细节:

  1. 我的应用是facebook iframe应用(通过apps.facebook.com/myapp加载)
  2. 我正在使用IE9。 Chrome中也会出现相同的行为
  3. 该应用程序托管在http://localhost
  4. 发生了什么事?为什么SDK永远不会被加载?

    由于

    更新:刚刚在Chrome上试过它并且它有效(不知道为什么它之前没有用)。仍然无法在IE中工作

6 个答案:

答案 0 :(得分:6)

我在Windows上的Firefox 3.5中遇到了同样的问题,但只是在第一次登录页面时(可能是因为它是一台速度较慢的机器而且有一些奇怪的时间问题正在发生)。

我通过强制FB每次检查时刷新登录状态cookie来修复它:

FB.getLoginStatus(callback, true); //second argument forces a refresh from Facebook's server. 

如果没有“force = true”,有时它不会触发回调。

答案 1 :(得分:4)

我遇到了完全相同的问题,我在Facebook安全设置中解决了禁用“安全浏览”的问题。保持安全浏览强制页面为“https”,但我没有设置“安全画布URL”,这也在控制台中给了我很多错误。

希望这可以帮助某人:)

答案 2 :(得分:2)

根据我的经验,当第三方cookie被禁用时,getLoginStatus()从不在Firefox中调用回调。

原始海报提到他的申请是在http://localhost上托管的。我从来没有幸运,并相信它会导致问题。

就在今天,我遇到了getLoginStatus没有在任何浏览器上调用回调的问题,除非用户实际连接到应用程序!我希望这是facebook的一个错误,他们会解决。

答案 3 :(得分:1)

FB.getLoginStatus触发其回调的另一种可能性是使用未经授权查看该应用程序的“测试”用户帐户。非常糟糕的是facebook没有给你任何错误信息。 我还看到了关于坏appIds和redirectUrls的失败回调。

答案 4 :(得分:0)

我也特意在Chrome中遇到过这个问题。我尝试在页面加载时调用它,并在用户启动的操作之后没有成功。

原来,这不是一个跨域问题。 Chrome中的取消密码扩展名阻止了 getLoginStatus()电话。一旦我禁用了扩展程序,即使在页面加载时它也能正常工作。

有关此问题的更多信息,请访问:Chrome-only cross-domain scripting errs in Facebook iFrame App upon FB.Login(..)

答案 5 :(得分:0)

我知道这个问题现在有点老了,但是我跑过去寻找解决方案。

仔细检查您在Facebook应用配置中设置的内容&#34; Facebook登录网站&#34;。站点URL域必须与您的页面与FB.getLoginStatus(以及其他相关的auth Javascript)提供的域匹配。

经过几个小时的挣扎,我意识到我无法重用我在新服务器上的现有应用配置,并且必须创建一个新的应用来处理这个新服务器的网站登录。

其他答案可能在您的具体情况下同样有效,但由于可能有像我这样的其他人已经在这方面挣扎了一段时间,希望这给你另一个地方检查。在我的特定情况下,使用正确的站点URL制作新的应用程序就是答案。